执行时
$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
帮我继续进行 感谢...
答案 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
还有一个选项可以显示它们。