2016-11-12 64 views
0

因此,我有一個shell腳本ssh到一臺機器,然後使用expect通過期望傳遞一個密碼,然後運行一個matlab腳本。問題是我想爲網絡上的所有機器做這件事,如果它是我沒有連接之前要求我輸入密碼,它告訴我,它不能驗證機器是否問我,如果我想要連接並等待yes \ no響應。shell腳本「預計」來自ssh的各種響應

我希望我的shell腳本能夠處理它只是要求輸入密碼的情況,以及它在哪裏還可以處理yes \ no。我不知道如何去做「預期」,因爲它沒有收到它期望的結果。

另外由於某種原因,當我使用機器進行測試時,處理yes no響應的附加代碼不起作用,我知道我還沒有登錄。這是他們回覆的格式。

「無法建立主機'七(128.40.41.89)'的真實性 RSA密鑰指紋是d6:9d:d0:61:5f:bb:36:9a:74:2c:f6: b9:a7:79:03:98。 您確定要繼續連接(是/否)嗎?「

這是我的代碼,由於某些原因,我的加法不起作用,但工作正常,只是我在堆棧交換中發現的「密碼:」位。我可以看到終端,它詢問是\否問題,但是然後我的腳本沒有迴應。我猜測我以某種方式使用期望錯誤,但我不知道如何。

#!/bin/sh 
ssh seven 
expect "(yes\no)? " 
send "yes\r" 
expect "assword:" 
send "my password goes here\r" 

matlab -nodisplay -nojvm -nosplash -nodesktop -r \ 
"try, run('\path\matlab_script.m'), catch me, fprintf('%s/%s \n',me.identifier,me.message), end, exit" 

回答

1

一個可能的解決方法是運行與StrictHostKeyChecking設置爲無SSH:

ssh seven -o StrictHostKeyChecking=no 

這將未知的主機密鑰autimatically添加到已知主機列表中。

+0

@generic,有一個期望的解決方案(搜索「yes/no exp_continue」),但這是一個更好的方法來做到這一點。 –

+0

Spasibo Oleg,ochen blagodaren! 並感謝格倫,可能對未來的問題有用。 –