您現在的位置是:首頁 > 遊戲

Linux多臺機器一鍵免密互信指令碼(基礎版本)

由 anyux1 發表于 遊戲2022-07-13
簡介pub#私鑰key=id_rsa#使用者名稱稱user=root#使用者密碼passwd=root#需要root許可權安裝軟體install_cmd(){yum install -y pssh sshpass}create_key(){sl

rf怎麼在本地迴圈跑

大家好,我是anyux。本文介紹Linux多臺機器一鍵免密互信指令碼(基礎版本)。

Linux多臺機器一鍵免密互信指令碼(基礎版本)

因為很多操作工具構架需要免金鑰互信的基礎才能實現,比如hadoop,MHA等,本人十分懶惰,不想因為反覆克隆機器後,再搞複製貼上的操作。從昨天晚上11點還完成,氣得直接睡覺去了。

白天來公司,正巧無事(一會做完了),上手就開始完成這個指令碼。

心急的同學,可以直接替換head_ip(字首ip),arr(字尾ip),passwd(密碼),以root許可權直接執行

Linux多臺機器一鍵免密互信指令碼(基礎版本)

這個版本是很基礎的小指令碼,就跟鬧著玩一樣。

它的不足,

依賴第三工具,並且需要以root許可權安裝,執行

ip限制,需要手動修改

同步金鑰的演算法未最佳化,感覺可以最佳化,雖然還不知道最佳化的空間有多少

Linux多臺機器一鍵免密互信指令碼(基礎版本)

再說說它的實現邏輯

這裡的前提,是所有同步金鑰機器的密碼一致(不一致的要等待下一個版本更新吧)

隨機一臺機器登入,生成金鑰對,複製公鑰到其他主機認證

基於迴圈,逐個遠端登入主機,刪除金鑰對,重新生金鑰對

基於迴圈,逐個遠端登入主機,安裝遠端工具sshpass,複製公鑰到其他機器,還有本地主機localhost

檢測多主機免密通訊情況

#!/bin/bash

#演算法金鑰

#分發給指定機器

#ip_header

head_ip=‘192。168。255。’

#ip_footer

arr=(113 114 115)

#使用者家金鑰目錄

base_dir=~/。ssh/

#公鑰

pub=id_rsa。pub

#私鑰

key=id_rsa

#使用者名稱稱

user=root

#使用者密碼

passwd=root

#需要root許可權安裝軟體

install_cmd(){

yum install -y pssh sshpass

}

create_key()

{

sleep 2

#刪除本地初始金鑰對

rm -rf ${base_dir}

sleep 1

echo -e “刪除完成\n”

echo “開始分發”

echo “\n”

echo “++++++++++++++++++++”

#本地主機生成金鑰

\ssh-keygen -t rsa -f ${base_dir}${key} -P “”

for ip in ${arr[@]}

do

echo “輸出ip**********”

echo “ssh root@${head_ip}${ip} ”

tmp=‘ssh-keygen -t rsa -f ${base_dir}${key} -P “”’

#本地主機公鑰複製到其他主機認證檔案

sshpass -p${passwd} ssh-copy-id $user@${head_ip}${ip} -o StrictHostKeyChecking=no

#遠端主機連線,刪除已生成的金鑰,並重新生成金鑰

sshpass -p${passwd} ssh $user@${head_ip}${ip} “rm -rf ${base_dir}${key};rm -rf ${base_dir}{pub}”

#遠端主機連線,生成金鑰

sshpass -p${passwd} ssh $user@${head_ip}${ip} “ssh-keygen -t rsa -f ${base_dir}${key} -P ‘’”

#遠端主機連線,將公鑰複製到其他主機認證檔案

for tmp_ip in ${arr[@]}

do

#安裝遠端連線工具

sshpass -p${passwd} ssh $user@${head_ip}${ip} “yum install -y sshpass;”

#遠端主機,將公鑰同步到其他機器

sshpass -p${passwd} ssh $user@${head_ip}${ip} “sshpass -p${passwd} ssh-copy-id $user@${head_ip}${tmp_ip} -o StrictHostKeyChecking=no”

#遠端主機,將公鑰同步localhost主機名下

sshpass -p${passwd} ssh $user@${head_ip}${ip} “sshpass -p${passwd} ssh-copy-id $user@localhost -o StrictHostKeyChecking=no”

done

done

echo -e “分發完結\n”

}

check_ip(){

for ip in ${arr[@]}

do

pssh -H ${head_ip}${ip} -i $1

done

}

bat()

{

echo “輸出ok:”;

check_ip ‘echo “ok”’

echo “輸出ping結果:”;

check_ip ‘ping qq。com -c 2’

echo “獲取主機名:”;

check_ip ‘ls ~/。ssh’

echo “獲取主機名:”;

check_ip “source /etc/profile;ip a | grep inet | grep ${head_ip}”

}

main(){

install_cmd;

create_key;

bat

}

main

推薦文章