您好,登錄后才能下訂單哦!
平時運維中有時會遇到需要更改服務器的管理員密碼,如果服務器比較多的時候,我們可以編寫一個腳本來實現,省時省力。
linux使用SSH登陸時需 要手動輸入yes 來確認連接,所以首先要解決這個問題,讓腳本實現遠程執行命令無須人工干預。
第一步 使用ssh-keygen創建本機的公鑰和私鑰
創建成功后會在/root/.ssh下生成私鑰和公鑰
第二步 使用ssh-copy-id復制公鑰到遠程主機及expect內部命令編寫ssh自動登陸腳本
auto_ssh_copy_id () {
expect -c "set timeout -1;
spawn /usr/bin/ssh-copy-id -i /root/.ssh/id_rsa.pub root@$2;
expect {
*(yes/no)* {send -- yes\r;exp_continue;}
*password:* {send -- $1\r;exp_continue;}
eof{exit 0;}
}";
}
調用方法:auto_ssh_copy_id $pass1 $ipnet.$i
假設需要更改密碼的服務器IP 在172.18.0.1-172.18.0.100之間,腳本如下。
#!/bin/bash
#Program
#
#relase
#tryrus 20161029
ipnet=172.18.0 #改成實際的IP 段
declare i=1 #改成實際開始的IP
pass1=password1 #ssh遠程登陸root的密碼
pass2=password2 #要設定的新密碼
auto_ssh_copy_id () {
expect -c "set timeout -1;
spawn /usr/bin/ssh-copy-id -i /root/.ssh/id_rsa.pub root@$2;
expect {
*(yes/no)* {send -- yes\r;exp_continue;}
*password:* {send -- $1\r;exp_continue;}
eof{exit 0;}
}";
}
auto_ssh_change_psw() {
expect -c "set timeout -1;
spawn ssh root@$2 "passwd";
expect {
*New* {send -- $1\r;exp_continue;}
*Retype* {send -- $1\r;exp_continue;}
eof{exit 0;}
}";
}
while [[ "$i" -le "100" ]] #控制循環,數值改成實際要使用的IP
do
ping "$ipnet.$i" -c 3 > /dev/null
if [ $? -eq 0 ];then
auto_ssh_copy_id $pass1 $ipnet.$i #運行一次后,這行就不需要了
auto_ssh_change_psw $pass2 $ipnet.$i
fi
let "i+=1"
done
第二次測試結果
謝謝你打開這篇博文,并一直堅持看到了這里,如果覺得對你有幫助,請不要吝嗇點一下右下角的贊。
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。