shell批量推送公鑰指令碼

2022-06-12 23:12:08 字數 1362 閱讀 8345

寫乙個指令碼,將跳板機上yunwei使用者的公鑰推送到區域網內可以ping通的所有機器上

說明:主機和密碼檔案已經提供

#!/bin/env bash

#判斷公鑰是否存在

[ ! -f /home/yunwei/.ssh/id_rsa ] && ssh-keygen -p '' -f ~/.ssh/id_rsa

#迴圈判斷主機是否ping通,如果ping通推送公鑰

ip=/home/yunwei/ip.txt

for i in `cat $ip`

do ip=`echo $i|cut -d: -f1`

pass=`echo $i|cut -d: -f2`

ping -c1 $ip &>/dev/null

if [ $? -eq 0 ];then

echo $ip >> /home/yunwei/ipup.txt

expect <<-eof &>/dev/null

spawn ssh-copy-id root@$ip

expect

"password" \n" }

}expect eof

eofelse

echo $ip >> /home/yunwei/ipdown.txt

fidone

wait

echo "公鑰已經推送完畢,正在測試...."

remote_ip=`tail -1 /home/yunwei/ipup.txt`

ssh root@$remote_ip hostname &>/dev/null

test $? -eq 0 && echo "公鑰成功推送完畢"

寫法二,支援併發

#!/bin/bash

#判斷公鑰是否存在

[ ! -f /home/yunwei/.ssh/id_rsa ] && ssh-keygen -p '' -f ~/.ssh/id_rsa

#迴圈判斷主機是否ping通,如果ping通推送公鑰

tr ':' ' ' < /home/yunwei/ip.txt|while read ip pass

do "password:"

}expect eof

endfi

}&done

wait

echo "公鑰已經推送完畢,正在測試...."

#測試驗證

remote_ip=`tail -1 ~/ip_up.txt`

ssh root@$remote_ip hostname &>/dev/null

test $? -eq 0 && echo "公鑰成功推送完畢"

利用Ansible 批量推送公鑰

yuminstall epel release 確保有擴充套件源 yum install ansible y ansible version ansible 2.9.6 配置檔案路徑config file etc ansible ansible cfg 查詢模組路徑configured module...

(九)expect批量公鑰推送

注意 注釋不能出現這指令碼裡面 spawn表示開啟乙個會話 r 表示回車,exp continue 表示沒有出現這樣,繼續往下執行 interact 停留在對面終端 usr bin expect spawn ssh root 192.168.111.101 expect password inter...

批量推送公鑰並且巡檢伺服器

這裡是寫了乙個判斷語句,首先判斷是否本地存在秘鑰目錄,如果不存在就產生金鑰對,並且將公鑰資訊進行推送到需要免密登入伺服器中,當然,因為是指令碼形式書寫,所以這裡所有的操作都是免互動進行,另外如果存在秘鑰目錄,這裡可以做乙個使用者互動,詢問使用者需要遠端到哪個伺服器,直接幫使用者遠端,並檢視伺服器的硬...