2014-06-23 95 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

'猫'的目的是写出期望看到什么,所以你可以检查它。它不应该自己解决问题。您期望的脚本可能无效,我已经更新了您的问题的答案(您没有给出任何错误消息以帮助缩小范围)。 –