SSH免密碼登陸簡單流程
1.通過指令ssh-keygen -t rsa在本機生成公鑰
運作指令之後一路回車即可
(對私鑰設定密碼ssh-keygen -t rsa -P '',如果擔心私鑰的安全,可以設定一個。沒有特殊需求直接Enter,為空)
2.通過指令 ssh-copy-id 192.168.1.1 将公鑰複制到其他機器
通過Shell腳本自動化對叢集實作SSH免密碼登陸
init.sh 此腳本在叢集中某台機器上執行。(ssh_init.sh放在同級目錄)
#!/bin/bash
#将ssh_init.sh複制到遠端主機并執行
#叢集IP
SERVERS="192.168.8.6 192.168.8.7 192.168.8.8"
#每台遠端主機的機器密碼
PASSWORD=root
#複制ssh_init.sh到遠端主機
ssh_file(){
expect -c "set timeout -1;
spawn scp ssh_init.sh [email protected]$1:/root/
expect {
*(yes/no)* {send -- yes\r;exp_continue;}
*password:* {send -- $2\r;exp_continue;}
eof {exit 0;}
}";
}
#在遠端主機上執行ssh_init.sh
execute_sh(){
expect -c "set timeout -1;
spawn ssh [email protected]$SERVER /root/ssh_init.sh
expect {
*(yes/no)* {send -- yes\r;exp_continue;}
*password:* {send -- $2\r;exp_continue;}
eof {exit 0;}
}";
}
#周遊 将ssh複制到遠端主機并執行
for SERVER in $SERVERS
do
ssh_file $SERVER $PASSWORD
execute_sh $SERVER $PASSWORD
done
ssh_init.sh
#!/bin/bash
#在本機生成公鑰,并copy至其他主機
#叢集IP
SERVERS="192.168.8.6 192.168.8.7 192.168.8.8"
#每台遠端主機的機器密碼
PASSWORD=root
#自動把本地主機的公鑰複制到遠端主機
auto_ssh_copy_id(){
#expect 人機互動
expect -c "set timeout -1;
#執行指令
spawn ssh-copy-id $1;
expect {
#如果提示yes/no, 輸入yes,繼續
*(yes/no)* {send -- yes\r;exp_continue;}
#如果提示password, 輸入密碼回車,繼續
*password:* {send -- $2\r;exp_continue;}
#互動結束,退出
eof {exit 0;}
}";
}
#擷取ssh公鑰
get_rsa(){
expect -c "set timeout -1;
spawn ssh-keygen -t rsa;
expect {
*Enter* {send -- \r;exp_continue;}
eof {exit 0;}
}";
}
get_rsa
#循環周遊所有遠端主機,自動把本地主機的公鑰複制到遠端主機
for SERVER in $SERVERS
do
auto_ssh_copy_id $SERVER $PASSWORD
done
在一台主機執行init.sh腳本即可。(注意執行之前需要給兩個腳本增加執行權限)
文章寫的比較簡單,比如ssh具體流程沒有詳細記錄。此處隻是記錄大概流程以及自動化腳本。
有問題歡迎大家留言糾錯,謝謝。