平時運維中有時會遇到需要更改服務器的管理員密碼,如果服務器比較多的時候,我們可以編寫一個腳本來實現(xiàn),省時省力。
成都地區(qū)優(yōu)秀IDC服務器托管提供商(創(chuàng)新互聯(lián)).為客戶提供專業(yè)的成都西信服務器托管,四川各地服務器托管,成都西信服務器托管、多線服務器托管.托管咨詢專線:13518219792linux使用SSH登陸時需 要手動輸入yes 來確認連接,所以首先要解決這個問題,讓腳本實現(xiàn)遠程執(zhí)行命令無須人工干預。
第一步 使用ssh-keygen創(chuàng)建本機的公鑰和私鑰
創(chuàng)建成功后會在/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" ]] #控制循環(huán),數(shù)值改成實際要使用的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
第二次測試結果
謝謝你打開這篇博文,并一直堅持看到了這里,如果覺得對你有幫助,請不要吝嗇點一下右下角的贊。
另外有需要云服務器可以了解下創(chuàng)新互聯(lián)cdcxhl.cn,海內外云服務器15元起步,三天無理由+7*72小時售后在線,公司持有idc許可證,提供“云服務器、裸金屬服務器、高防服務器、香港服務器、美國服務器、虛擬主機、免備案服務器”等云主機租用服務以及企業(yè)上云的綜合解決方案,具有“安全穩(wěn)定、簡單易用、服務可用性高、性價比高”等特點與優(yōu)勢,專為企業(yè)上云打造定制,能夠滿足用戶豐富、多元化的應用場景需求。