用expect實現ssh自動登陸對服務器進行批量管理

########### auto_login.sh   ##################### 1 #!/usr/local/bin/expect 2 set PASSWD [lindex $argv 1] 3 set IP     [lindex $argv 0] 4 set CMD [lindex $argv 2] 5 spawn ssh $IP $CMD 6 expect "(yes/no)?" { 7 send "yes\r" 8 expect "password:" 9 send "$PASSWD\r" 10 } "password:" {send "$PASSWD\r"} "*host " {exit 1} 11 expect eof
第一行制定使用/usr/local/bin目錄下的expect命令對後面的程序進行解釋。 第二行,三行,四行,分別從命令行參數中獲取要登陸的主機IP地址,登錄密碼,以及要執行的命令。 第五行,大概就是要觸發這樣一個事件,執行ssh $IP $CMD命令。 第6行道第11行就是expect的整個交互過程了。 若是讀取到(yes/no)?提示符,就輸入yes並回車,若是讀取到password:提示輸入密碼的字符串,就輸入用戶登陸密碼(root用戶)。 固然若是不是第一次登錄,之前已經登陸過的話,當輸入ssh $IP $CMD回車後,會直接提示輸入密碼也就是說會讀到字符串」* password:」,這個時候會輸入密碼回車(send "$PASSWD\r"). 另外,若是主機不可達的話,(yes/no)?和」password:」的可能都不會出現,系統會提示: 「No route to host」這個時候,咱們退出程序。
相關文章
相關標籤/搜索