ssh免密碼登錄之分發密鑰


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

 

博主原創文章,轉載請務必注明出處


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM