閱讀 1,623 次

有時候我們會需要一些人不在的自動登入作業,以便維護伺服器。如果非得要在甲機器自動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 做掉。但有時乙的工作啟動時機,需要甲機器來主動告知才能發動時,就有必要的。通常是乙要等甲完成一些事情吧。

RSS Trackback URL ming | 十一月 17, 2007 (4:41 下午)

Linux

留下回應