SSH連接原理及ssh-key講解
阿新 • • 發佈:2018-11-04
驗證 -- 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講解