无法使用expect生成(ssh)

时间:2010-09-17 06:21:41

标签: tcl expect spawn

执行时

$expect filename.exp user pwd ip

我收到了错误

  

无法执行“ssh -l user ip”:没有这样的文件或目录

filename.exp的内容是:

#!/opt/sfw/bin/expect -D

set OMC_Usr  [lindex $argv 0]
set OMC_Pwd  [lindex $argv 1]
set OMC_IP  [lindex $argv 2]

set cmd "ssh -l $OMC_Usr $OMC_IP"
spawn $cmd
expect "Password:"
send "$OMC_Pwd\r"
interact

帮我继续​​进行 感谢...

1 个答案:

答案 0 :(得分:3)

问题是spawn需要命令及其参数作为多个Tcl参数传递给它,就像标准的Tcl exec命令一样。解决方法是直接执行此操作:

spawn ssh -l $OMC_Usr $OMC_IP

或者,如果您愿意(并且您已经获得了Tcl 8.5):

set cmd "ssh -l $OMC_Usr $OMC_IP"
spawn {*}$cmd

或者,如果你有8.4或之前:

eval spawn [lrange $cmd 0 end]

执行此操作:

eval spawn $cmd

因为如果您的用户名(或IP地址中有Tcl元字符,但这种情况非常不可能),那么会意外中断。


当然,真正的修复是设置RSA密钥对并使用ssh-agent来管理它。像这样,您不需要在任何命令行上传递密码;这很重要,因为进程的命令行是有关进程的公共信息。真。你可以找到像ps -efww这样简单的东西(或者你的操作系统的等价物)。环境变量也同样不安全; ps还有一个选项可以显示它们。