2013-12-18 59 views
2

我是期待腳本的新手。在預期腳本中處理多個語句

我在linux機器上爲ssh編寫了一個期望腳本,我在不同的linux機器上面臨着sshing問題。下面我複製了腳本。

!/usr/local/bin/expect 

set LinuxMachine [lindex $argv 0] 

spawn ssh [email protected]$LinuxMachine 


expect "[email protected]$LinuxMachine's password:" 

send "root123\n" 

expect "[[email protected]_FC12_172_85 ~]#" 

send "ls" 

interact 

當我從提供的命令行預計,4號線10.213.172.85,它讀作「[email protected]'s password:」,成功的登錄

但是一些Linux將expect-

The authenticity of host '10.213.172.108 (10.213.172.108)' can't be established. 
RSA key fingerprint is da:d0:a0:e1:d8:7a:23:8b:c7:d8:40:8c:b2:b2:9b:95. 
Are you sure you want to continue connecting (yes/no) 

在這案例腳本不起作用。

請讓我知道如何在一個expect命令中使用兩個expect語句。

在此先感謝!

回答

7

您可以在這種情況下使用exp_continue:

expect { 
     "Are you sure you want to continue connecting (yes/no)" { 
      send "yes\r" 
      exp_continue 
     } 
     "[email protected]$LinuxMachine's password:" { 
      send "root123\r" 
      expect "[[email protected]_FC12_172_85 ~]#" 
      send "ls\r" 
      interact 
     } 
} 

在上面的期待要麼是/否的問題或密碼提示塊等待。如果是後者,它會繼續提供密碼,期待提示,發送ls命令並給予控制權。如果前者回答'是'並重復期望塊,準備找到提示輸入密碼(或者就此而言甚至是否/否問題 - 不是您需要的)。

如果某些期望的選項與預期的不匹配,我還會包含一些帶有意義的消息的超時,但上述內容應該可行。

作爲一個方面的評論,你不想在腳本中設置一個根密碼......我推薦使用ssh密鑰認證。

讓我知道它是怎麼回事。

0

我們喜歡叫它「長日誌」,也有不檢查主機密鑰的ssh選項:在預期調用bash腳本的

send -- "ssh -o UserKnownHostsFile=/dev/null -o StrictHostKeyChecking=no [email protected]\n" 
expect { 
     "Password" { 
       send -- "$passwd\n" 
     } 

部分設置密碼:

echo -n "Enter LDAP password: " 
read -s passwd 
echo