天天看點

學習大資料之SSH免密登陸以及自動化腳本

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具體流程沒有詳細記錄。此處隻是記錄大概流程以及自動化腳本。

有問題歡迎大家留言糾錯,謝謝。