linux網狀互信的處理方法

基礎材料

CentOS 7.7 minimal  關閉selinux  防火牆

通常我們使用ansible或者pssh等批量工具進行操作的一個重要前提是控制端到被控端的單向免密互信,又或者是做Oracle RAC或GPFS文件系統時雙機間的需要雙向互信,對於前者通常在做虛擬機模板時可以直接打入模板中即可,對於後者通常主機數量不是很多,手工生成一下也就可以了,最近遇到一個需求是在幾十臺主機間做網狀互信,即從任何一臺主機到其他所有主機都需要免密互信,這種情況必須要進行腳本作業了

整體步驟:

1、每臺主機生成祕鑰   2、控制端主機收集祕鑰   3、分發控制主機收集的祕鑰文件authorized_keys以及known_hosts到所有主機


執行腳本前需要準備:
1、找到一臺控制機,確保到所有其他主機都可以ssh連通
2、在控制機安裝軟件包yum install -y sshpass
3、準備txt文件,將互信IP及密碼每臺主機一行存入txt文件(如果主機密碼都相同寫死在腳本中即可,這種情況只存IP,腳本中也不必單獨取一次密碼,會比較省事)
樣例如下,本次分隔符使用了@,如果與實際密碼衝突可自行更換
10.1.1.2@123456
10.1.1.3@567890






腳本如下:

#生成所有主機密鑰,並完成祕鑰收集
for i in `cat ip.txt`
do
ip=`echo $i |awk -F "@" '{print $1}'
password=`echo $i |awk -F "@" '{print $2}'
sshpass -p $password ssh $ip -o StrictHostKeyChecking=no "mv /root/.ssh/{id_rsa,id_rsa.pub} /tmp;ssh-keygen -t rsa -f /root/.ssh/id_rsa -N '';cat /root/.ssh/id_rsa.pub"|grep ssh-rsa>>/root/.ssh/authorized_keys
done
#分發authorized_keys及known_hosts
for i in `cat ip.txt`
do
ip=`echo $i |awk -F "@" '{print $1}'
password=`echo $i |awk -F "@" '{print $2}'
sshpass -p $password scp /root/.ssh/{authorized_keys,known_hosts} root@$ip:/root/.ssh/
done

執行腳本後隨機挑選幾臺主機測試免密登陸

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章