1. 程式人生 > >SSH連接原理及ssh-key講解

SSH連接原理及ssh-key講解

驗證 -- ted aid 遠程連接 c11 www. inux 支持

一、遠程連接的兩種方式

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

二、遠程復制

1、命令說明:

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

2、實例:
例1:把本地的/etc/hosts遠程復制給對方

scp /etc/hosts [email protected]:/etc 

例2、從對方取文件:

scp [email protected]:/etc/hosts /etc

註:如果遠程登錄時候很慢,改個配置文件即可方法如下:

1、vim /etc/ssh/sshd_config 裏面第81行GSSAPIAuthentication yes改成no(表示不需要驗證)122行#UseDNS yes改成UseDNS no (反向解析)
2、重啟sshd服務
3、把改好的配置文件復制給對方服務器
4、重啟對方的sshd服務

三、密鑰對

密鑰對:是一個含有私鑰的文件和一個含有公鑰的文件,兩只關系為用私鑰登錄公鑰,實現免密碼登錄,私鑰可以一對多個公鑰。私鑰會放在家目錄下的隱藏.ssh目錄裏,私鑰權限為600,公鑰644

四、密鑰對應用

1、命令:
創建密鑰對: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則是公鑰

五、實例

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

1、創建密鑰對 ssh-keygen
2、將公鑰id_rsa.pub文件復制到另外一臺服務器的用戶家目錄下的.ssh目錄下 ,如果沒有需要創建一個。並且權限改成700
3、將拷貝過去的id_rsa.pub文件裏的內容追加到~/.ssh/authorized_keys文件裏
cat ~/.ssh/id_rsa.pub >> ~/.ssh/authorized_keys

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

1、將公鑰id_rsa.pub文件復制到另外一臺服務器的普通用戶家目錄下
scp ~/.ssh/id_rsa.pub [email protected]:~
2、將公鑰內容寫入cat ~/.ssh/id_rsa.pub >> ~/authorized_keys
3、在去另外一臺服務器家目錄下創建.ssh目錄並修改權限為700,把屬主改為普通用戶
4、authorized_keys移動到.ssh目錄下,改屬主為普通用戶

例3:非交互式一條命令創建密鑰對

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

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

1、需要安裝sshpass工具,需要雲yum倉庫安裝。參數 -p 指定密碼  -f:給出密碼文件路徑
2、sshpass -p “密碼”ssh-copy-id -i ~/.ssh/id_dsa.pub  [email protected]
表示給普通用戶yunjisuan設定免密碼連接

說明:

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

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

#!/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

SSH連接原理及ssh-key講解