2013-10-07 130 views
0

我是新來的期望腳本,並有一個用例,我需要從一臺機器上執行ssh,在這臺機器上我已經使用expect腳本完成了ssh。這是我的代碼片段使用expect腳本從遠程機器執行ssh

#!/usr/bin/expect -f 
set timeout 60 
spawn ssh [email protected] 

expect "Password: " 
send "Password\r" 

send "\r" # This is successful. I am able to login successfully to the first machine 

set timeout 60 
spawn ssh [email protected] #This fails 

這需要時間的一定量和失敗說 的ssh:連接到主機machine2.domain.com端口22:操作超時。我知道22是ssh運行的默認端口,我可以通過給ssh一個-p選項來手動覆蓋它。

如果我在沒有期望腳本的情況下獨立嘗試ssh,我會得到一個提示,要求我輸入(是/否)。如果我沒有期望腳本直接執行ssh,從哪裏接收正確的端口。如果我不需要在shell上輸入端口號,爲什麼在我使用期望腳本時需要輸入端口號。

回答

4

那就是說,你不會產生一個新的ssh:spawn在你的本地機器上創建一個新的進程。你只是發送一個命令到遠程服務器

#!/usr/bin/expect -f 
set timeout 60 
spawn ssh [email protected] 

expect "Password: " 
send "Password\r" 

send "\r" # This is successful. I am able to login successfully to the first machine 

# at this point, carry on scripting the first ssh session: 
send "ssh [email protected]\r" 
expect ... 
+0

我花了一個晚上睡覺,瞭解我在mu what什麼。在我可以在劇本中做出改變之前,你已經回答了。只是修改了第二次嘗試ssh到發送而不是產卵和它的工作。謝謝。 –

相關問題