Linux多臺(tái)機(jī)器一鍵免密互信腳本簡(jiǎn)介
大家好,我是anyux。我將給大家介紹Linux多臺(tái)機(jī)器一鍵免密互信腳本。
因?yàn)楹芏嗖僮鞴ぞ邩?gòu)架需要免密鑰互信的基礎(chǔ)才能實(shí)現(xiàn),比如hadoop,MHA等,本人十分懶惰,不想因?yàn)榉磸?fù)克隆機(jī)器后,再搞復(fù)制粘貼的操作。從昨天晚上11點(diǎn)還完成,氣得直接睡覺(jué)去了。
白天來(lái)公司,正巧無(wú)事(一會(huì)做完了),上手就開始完成這個(gè)腳本。
心急的同學(xué),可以直接替換head_ip(前綴ip),arr(后綴ip),passwd(密碼),以root權(quán)限直接運(yùn)行
這個(gè)版本是很基礎(chǔ)的小腳本,就跟鬧著玩一樣。
它的不足,
依賴第三工具,并且需要以root權(quán)限安裝,運(yùn)行ip限制,需要手動(dòng)修改同步密鑰的算法未優(yōu)化,感覺(jué)可以優(yōu)化,雖然還不知道優(yōu)化的空間有多少
再說(shuō)說(shuō)它的實(shí)現(xiàn)邏輯
這里的前提,是所有同步密鑰機(jī)器的密碼一致(不一致的要等待下一個(gè)版本更新吧)
隨機(jī)一臺(tái)機(jī)器登錄,生成密鑰對(duì),復(fù)制公鑰到其他主機(jī)認(rèn)證基于循環(huán),逐個(gè)遠(yuǎn)程登錄主機(jī),刪除密鑰對(duì),重新生密鑰對(duì)基于循環(huán),逐個(gè)遠(yuǎn)程登錄主機(jī),安裝遠(yuǎn)程工具sshpass,復(fù)制公鑰到其他機(jī)器,還有本地主機(jī)localhost檢測(cè)多主機(jī)免密通信情況#!/bin/bash#算法密鑰#分發(fā)給指定機(jī)器#ip_headerhead_ip='192.168.255.'#ip_footerarr=(113 114 115)#用戶家密鑰目錄base_dir=~/.ssh/#公鑰pub=id_rsa.pub#私鑰key=id_rsa#用戶名稱user=root#用戶密碼passwd=root#需要root權(quán)限安裝軟件install_cmd(){yum install -y pssh sshpass}create_key(){sleep 2#刪除本地初始密鑰對(duì)rm -rf ${base_dir}sleep 1echo -e "刪除完成\n"echo "開始分發(fā)"echo "\n"echo "++++++++++++++++++++"#本地主機(jī)生成密鑰\ssh-keygen -t rsa -f ${base_dir}${key} -P ""for ip in ${arr[@]}doecho "輸出ip**********"echo "ssh root@${head_ip}${ip} "tmp='ssh-keygen -t rsa -f ${base_dir}${key} -P ""'#本地主機(jī)公鑰復(fù)制到其他主機(jī)認(rèn)證文件sshpass -p${passwd} ssh-copy-id $user@${head_ip}${ip} -o StrictHostKeyChecking=no#遠(yuǎn)程主機(jī)連接,刪除已生成的密鑰,并重新生成密鑰sshpass -p${passwd} ssh $user@${head_ip}${ip} "rm -rf ${base_dir}${key};rm -rf ${base_dir}{pub}"#遠(yuǎn)程主機(jī)連接,生成密鑰sshpass -p${passwd} ssh $user@${head_ip}${ip} "ssh-keygen -t rsa -f ${base_dir}${key} -P ''"#遠(yuǎn)程主機(jī)連接,將公鑰復(fù)制到其他主機(jī)認(rèn)證文件for tmp_ip in ${arr[@]}do#安裝遠(yuǎn)程連接工具sshpass -p${passwd} ssh $user@${head_ip}${ip} "yum install -y sshpass;"#遠(yuǎn)程主機(jī),將公鑰同步到其他機(jī)器sshpass -p${passwd} ssh $user@${head_ip}${ip} "sshpass -p${passwd} ssh-copy-id $user@${head_ip}${tmp_ip} -o StrictHostKeyChecking=no"#遠(yuǎn)程主機(jī),將公鑰同步localhost主機(jī)名下sshpass -p${passwd} ssh $user@${head_ip}${ip} "sshpass -p${passwd} ssh-copy-id $user@localhost -o StrictHostKeyChecking=no"donedoneecho -e "分發(fā)完結(jié)\n"}check_ip(){for ip in ${arr[@]}dopssh -H ${head_ip}${ip} -i $1done}bat(){echo "輸出ok:";check_ip 'echo "ok"'echo "輸出ping結(jié)果:";check_ip 'ping qq.com -c 2'echo "獲取主機(jī)名:";check_ip 'ls ~/.ssh'echo "獲取主機(jī)名:";check_ip "source /etc/profile;ip a | grep inet | grep ${head_ip}"}main(){install_cmd;create_key;bat}main