ssh免密碼登錄之分發密鑰
1、ssh免密碼登錄
密碼登錄和密鑰登錄有什么不同?
密碼登錄(口令登錄),每次登錄都需要發送密碼(ssh)
密鑰登錄,分為公鑰和私鑰,公鑰相當於鎖,私鑰相當於鑰匙
1.1 生成密鑰對(公鑰和私鑰)
ssh-keygen
ls -a .ssh/ 查看公鑰和私鑰ls -a .ssh/
1.2 發送公鑰到要登錄的機器(客戶端)
ssh-copy-id root@10.0.0.31
authorized_keys存放公鑰的文件
1.3 測試免密鑰登錄
ssh root@10.0.0.31
ssh -v root@10.0.0.31 顯示ssh連接過程
2、遠程只能用密鑰登錄
2.1 配置免密碼登錄
2.2 修改/etc/sshd/sshd.conf的66行
PasswordAuthentication no
對稱加密:加密方法和解密一致
非對稱加密:公鑰和私鑰,公鑰和私鑰在一起完成(虎符)
3、任意兩台機器實現互相密鑰登錄的方法
方法1:次數較多
分別在每台機器上生成密鑰對ssh-keygen
將公鑰分別發送給其他機器(較麻煩)ssh-copy-id root@10.0.0.31
方法2:次數較少
在一台機器上生成密鑰對ssh-keygen
在已登錄的狀態下將公鑰發送給自己 ssh-copy-id root@10.0.0.41
將.ssh目錄發送到其他機器 scp -rp .ssh root@10.0.0.8:~
-r 拷貝整個目錄
-p 保持屬性
4、免密碼登錄應用
免密碼登錄可以在不登錄到其他機器的情況下在其他機器上執行命令,批量執行多台機器的命令
for n in 31 7 8;do ssh root@10.0.0.$n "hostname";done
for n in 7 8 31 41;do ping 172.16.1.$n -c2;done
5、ssh免密碼登錄之分發密鑰
利用expect解決非交互問題
管理N台服務器的時候,普通的分發密鑰方法會比較繁瑣
5.1 一鍵生成密鑰對
ssh-keygen -t rsa -f ~/.ssh/id_rsa -q -P ''
ssh-keygen -t rsa -f ~/.ssh/id_rsa -q -P ''
-t指定要創建的密鑰類型
-f指定密鑰文件名
-q安靜模式
-P提供(舊)密語
檢查生成的密鑰對
[root@backup ~]# ll .ssh/
total 8
-rw------- 1 root root 1675 Apr 27 17:18 id_dsa
-rw-r--r-- 1 root root 393 Apr 27 17:18 id_dsa.pub
5.2 將密鑰對發送給自己
ssh-copy-id root@10.0.0.41
5.3 安裝ecpect
yum install expect –y
5.4 expect腳本
[root@backup scripts]# cat send_pub.sh
#!/bin/bash
for n in 7 8 31;
do
expect send_pub.exp 10.0.0.$n #執行腳本並使其獲取IP參數
done
[root@backup scripts]# cat send_pub.exp
#!/usr/bin/expect
#set timeout 20 #設置超時時間,,默認為10秒,這里注釋掉了
set IP [lindex $argv 0] #獲取參數IP
spawn ssh-copy-id root@$IP #監控執行的命令 spawn標簽用於expect腳本中,實現交互
expect "(yes/no)?" #當遇到(yes/no)?情況時
send "yes\r" #輸入yes並回車
expect "password:" #當遇到password:情況時
send "123456\r" #輸入密碼並回車
interact #跳出控制台
執行send_pub.sh即可批量給另外三台機器分發密鑰
5.5 檢查結果
ssh登錄到其他機器,是否能直接登錄
6、免密碼分發密鑰兩兩可登錄
在5中通過一台機器批量分發密鑰到其他機器實現免密鑰登錄到其他機器,這里進行升級批量分發密鑰實現兩兩可免密鑰登錄
[root@backup scripts]# cat yijian.sh
#!/bin/bash
###NO.1
ssh-keygen -t rsa -f ~/.ssh/id_rsa -q -P '' #一鍵生成密鑰對
###NO.2
for n in 41 31 7 8;
do
expect key_self.exp 10.0.0.$n #執行腳本並使其獲取IP參數
done
###NO.3
for n in 31 7 8;
do
scp -rp /root/.ssh root@10.0.0.$n:/root #將.ssh下的所有文件發送到其他機器
done
[root@backup scripts]# cat key_self.exp
#!/usr/bin/expect
#set timeout 20
set IP [lindex $argv 0]
spawn ssh-copy-id root@$IP
expect "(yes/no)?"
send "yes\r"
expect "password:"
send "123456\r"
interact
執行yijian.sh即可實現目標
7、expect腳本應用
利用expect監控passwd命令
expect passwd.exp 舊密碼 新密碼 執行即可實現passwd非交互
[root@backup scripts]# cat passwd.exp
#!/usr/bin/expect
set old [lindex $argv 0] #獲取參數舊密碼
set new [lindex $argv 1] #獲取參數新密碼
spawn passwd
expect "(current) UNIX password:"
send "$old\r"
expect "New password:"
send "$new\r"
expect "Retype new password:"
send "$new\r"
interact
博主原創文章,轉載請務必注明出處