SSH鏈接原理及ssh-key講解

1、遠程鏈接的兩種方式

一、telnet 明文鏈接,不安全。 鏈接方式:telnet 加IP加端口號(可判斷對方的某個端口是否開啓) 
二、ssh 加密鏈接,安全 。鏈接方式:ssh加IP 對方22端口必須是開啓狀態 
可指定登陸的用戶,不指定默認登陸root用戶 
以上必須安裝scp命令,支持遠程鏈接才行,而且以上兩種不能彼此鏈接。
linux

 

2、遠程複製

一、命令說明:vim

scp 遠程複製  參數-P(大寫):接端口,默認22  -r:遞歸,表示拷貝目錄  -p:表示在拷貝先後保持文件或目錄屬性  -l limit:限制速度

二、實例: 
例1:把本地的/etc/hosts遠程複製給對方
安全

scp /etc/hosts root@192.168.200.150:/etc

例二、從對方取文件:bash

scp root@192.168.200.150:/etc/hosts /etc

注:若是遠程登陸時候很慢,改個配置文件便可方法以下:服務器

一、vim /etc/ssh/sshd_config 裏面第81行GSSAPIAuthentication yes改爲no(表示不須要驗證)122行#UseDNS yes改爲UseDNS no (反向解析)
二、重啓sshd服務
三、把改好的配置文件複製給對方服務器
四、重啓對方的sshd服務
 

3、密鑰對

密鑰對:是一個含有私鑰的文件和一個含有公鑰的文件,兩隻關係爲用私鑰登陸公鑰,實現免密碼登陸,私鑰能夠一對多個公鑰。私鑰會放在家目錄下的隱藏.ssh目錄裏,私鑰權限爲600,公鑰644網絡

 

4、密鑰對應用

一、命令:
建立密鑰對:ssh-keygen  參數:-t:指定加密類型(rsa,dsa)。-f:指定密鑰對文件的名字 。 -P(大寫):指定密碼
命令說明:
1)建立密鑰對時,要你輸入的密碼,爲進行密鑰對驗證時輸入的密碼(和linux角色登陸的密碼徹底沒有關係);
2)若是咱們要進行的是SSH免密碼鏈接,那麼這裏密碼爲空跳過便可。
3)若是在這裏你輸入了密碼,那麼進行SSH密鑰對匹配鏈接的時候,就須要輸入這個密碼了。(此密碼爲獨立密碼)
4)用戶家目錄下的.ssh隱藏目錄下會生成:id_rsa  id_rsa.pub  兩個文件。id_rsa是用戶的私鑰;id_rsa.pub則是公鑰
 

5、實例

例1:生成密鑰對,傳給對方服務器ssh

一、建立密鑰對 ssh-keygen
二、將公鑰id_rsa.pub文件複製到另一臺服務器的用戶家目錄下的.ssh目錄下 ,若是沒有須要建立一個。而且權限改爲700
三、將拷貝過去的id_rsa.pub文件裏的內容追加到~/.ssh/authorized_keys文件裏
cat ~/.ssh/id_rsa.pub >> ~/.ssh/authorized_keys

例2:登陸普通用戶遠程免密碼ide

一、將公鑰id_rsa.pub文件複製到另一臺服務器的普通用戶家目錄下
scp ~/.ssh/id_rsa.pub yunjisuan@192.168.200.150:~
二、將公鑰內容寫入cat ~/.ssh/id_rsa.pub >> ~/authorized_keys
三、在去另一臺服務器家目錄下建立.ssh目錄並修改權限爲700,把屬主改成普通用戶
四、authorized_keys移動到.ssh目錄下,改屬主爲普通用戶

例3:非交互式一條命令建立密鑰對工具

命令說明:ssh-copy-id 分發公密鑰對命令  參數:-i 指定要分發的內容 
一、一條命令生成密鑰對
ssh-keygen -t dsa -f ~/.ssh/id_dsa -P ""
二、經過ssh-copy-id進行公鑰的自動分發:
 ssh-copy-id -i ~/.ssh/id_dsa.pub  yunjisuan@192.168.200.150
把公鑰分發給普通用戶yunjisuan

例4:免密碼登陸對方服務器ui

一、須要安裝sshpass工具,須要雲yum倉庫安裝。參數 -p 指定密碼  -f:給出密碼文件路徑
二、sshpass -p 「密碼」ssh-copy-id -i ~/.ssh/id_dsa.pub  yunjisuan@192.168.200.150
表示給普通用戶yunjisuan設定免密碼鏈接

說明:

.ssh下的known_hosts文件是記錄已經鏈接過的IP用的。
遠程登陸時無需提示直接記錄方法 --免交互分發公鑰
sshpass -p 「密碼」 ssh-copy-id -i ~/.ssh/id_dsa.pub "-o StrictHostKeyChecking=no 對方IP"
命令說明:-o StrictHostKeyChecking=no:不記錄對方主機信息

5、實戰自動批量分發密鑰對腳本

#!/bin/bash

function Yum(){

umount /dev/sr0 &>/dev/null
[ -d /media/cdrom ] || mkdir -p /media/cdrom
[ $? -eq 0 ] && echo "建立目錄成功" || exit
    mount /dev/sr0 /media/cdrom &>/dev/null
    if [ $? -eq 0 ];then
        echo "掛載成功"
else
        exit
fi
[ -d /etc/yum.repos.d ] || mkdir -p /etc/yum.repos.d
cd /etc/yum.repos.d
mv * /tmp
cat > moban.repo << ok
[moban.repo]
name=moban
baseurl=file:///media/cdrom/
gpgcheck=0
enabled=1
ok
if [ $? -eq 0 ];then
            echo "配置文件成功"
    else
            exit
    fi
    yum -y clean all &>/dev/null
    yum makecache &>/dev/null
    if [ $? -eq 0 ];then
        echo "搭建成功"
else
        echo "搭建失敗請重新檢查"
        exit
fi

}

function Yun(){
ping -c 1 www.baidu.com &>/dev/null
if [ $? -eq 0 ];then
            echo "準備下載配置文件"
    else
            echo "不能鏈接外網,請檢查網絡"
            exit
    fi
    wget -O /etc/yum.repos.d/epel.repo http://mirrors.aliyun.com/repo/epel-6.repo
    yum -y clean all
    yum makecache
    if [ $? -eq 0 ];then
        echo "雲yum搭建完畢"
else
        echo "搭建失敗,請重新檢查"
        exit
fi
}

which scp &>/dev/null
if [ $? -eq 0 ];then
        echo "遠程插件已安裝"
else
        Yum
        yum -y install openssh-client
        echo "遠程插件安裝完畢"
fi

which sshpass &>/dev/null
if [ $? -eq 0 ];then
        echo "sshpass工具已安裝"
else
        Yun
        yum -y install sshpass
        echo "sshpass工具安裝完畢"
fi


[ -d ~/.ssh ] && rm -rf ~/.ssh/* || mkdir .ssh
chmod 700 ~/.ssh
ssh-keygen -t dsa -f ~/.ssh/id_dsa -P "" &>/dev/null
i=1
for ip in 192.168.200.{100..149}
do
        ping -c 1 -i 0.1 $ip &>/dev/null
            if [ $? -eq 0 ];then
                sshpass -p "123456" ssh-copy-id -i ~/.ssh/id_dsa.pub "-o StrictHostKeyChecking=no root@"$ip"" &>/dev/null
                    echo "$ip分發成功"
        else
                echo "$ip網絡不通,請檢查網絡"
        fi
        let i++
done
相關文章
相關標籤/搜索