2014-06-23 124 views
1
#!/bin/bash 
/usr/bin/expect << SSHLOGIN 

spawn ssh -o StrictHostKeyChecking=no [email protected]$host 

expect { 
    Password: { 
     send "Pass$word\n" 
     expect { 
      OK: { 
       send "xstatus\n" 
       send "quit\n" 
      } 
     } 
    } 
} 
SSHLOGIN 

這是無法通過ssh,因爲它不是在逃避「通行證$字\ N」的「$」字符,因爲$是密碼的一部分並沒有傳遞變量。你會如何逃避它?我知道在bash中,你會添加'\',但由於密碼在期望腳本部分,所以不起作用。

編輯: 改變Pass$word\nPass\\\$word\n作品

+0

您可以刪除,如果你的報價逃脫你的定界符的一層:'期待<<「SSHLOGIN'' –

+0

@glennjackman這也將禁止在ssh主機$擴張命令。 –

+0

是真的,我錯過了。 –

回答

2

這裏的文檔都是Bash代碼,所以你最好還是使用\$

期望腳本是TCL,因此您需要在此處轉義$。隨着逃逸的兩個級別,你會得到:

send "Pass\\\$word\n" 
+0

我嘗試使用貓,但沒有奏效。而我的最終擴展產品是一個有效的除了腳本 – lezzago

+0

'貓'的目的是寫出期望看到什麼,所以你可以檢查它。它不應該自己解決問題。您期望的腳本可能無效,我已經更新了您的問題的答案(您沒有給出任何錯誤消息以幫助縮小範圍)。 –