有時候我們會需要一些人不在的自動登入作業,以便維護伺服器。如果非得要在甲機器自動SSH登入乙機器,執行在乙機器上的某個 Shell Script。那甲機器需要安裝 expect 後,再於甲機器中先存好下列的 expect script,以便讓甲自動以root身分,一次在下面的命令中全作這些事情。
./sshautologin.sh 密碼 乙機器IP 乙的sshd服務port 乙中的某個shellscript_name
但要先存好這一隻小程式 sshautologin.sh :
#!/usr/bin/expect -f # Expect script to supply root/admin password for remote ssh server # and execute command. # password = Password of remote UNIX server, for root user. # ipaddr = IP Addreess of remote UNIX server, no hostname # port = port number which that SSHD listens # scriptname = Path to remote script which will execute on remote server # For example: # ./sshautologin.sh password 192.168.1.11 port who set password [lrange $argv 0 0] set ipaddr [lrange $argv 1 1] set port [lrange $argv 2 2] set scriptname [lrange $argv 3 3] set arg1 [lrange $argv 4 4] set timeout -1 # now connect to remote UNIX box (ipaddr) with given script to execute spawn ssh -p $port root@$ipaddr $scriptname $arg1 match_max 100000 # Look for passwod prompt expect "*?assword:*" # Send password aka $password send -- "$password\r" # send blank line (\r) to make sure we get back to gui send -- "\r" expect eof
若要換別的一般身分自動登入,將 spawn ssh -p $port root@$ipaddr $scriptname…中的 root拿掉,再加(或改)我們要輸入的帳號名。
雖然我們這邊討論的這種情形,通常可以在乙機器上直接以乙自身的 cron 做掉。但有時乙的工作啟動時機,需要甲機器來主動告知才能發動時,就有必要的。通常是乙要等甲完成一些事情吧。