could not able to spawn(ssh) using expect

混江龙づ霸主 提交于 2019-12-11 04:03:18

问题


while executing

$expect filename.exp user pwd ip

I got the error

could not execute "ssh -l user ip": no such file or directory

The contents of filename.exp are this:

#!/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

help me to proceed
Thanks...


回答1:


The problem is that spawn needs the command and its arguments passed to it as multiple Tcl arguments, just like the standard Tcl exec command. The fix is to do this directly:

spawn ssh -l $OMC_Usr $OMC_IP

Or, if you prefer (and you've got Tcl 8.5):

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

Or, if you've got 8.4 or before:

eval spawn [lrange $cmd 0 end]

But don't do this:

eval spawn $cmd

because that will break unexpectedly if you have a Tcl metacharacter in the username (or IP address, but that's very unlikely).


Of course, the real fix is to set up an RSA keypair and use ssh-agent to manage it. Like that, you won't need to pass passwords on any command line; that's important because the command line of a process is public information about the process. Really. You can find it out with something trivial like ps -efww (or the equivalent for your OS). Environment variables are just as insecure too; there's an option to ps to show them too.



来源:https://stackoverflow.com/questions/3733060/could-not-able-to-spawnssh-using-expect

标签
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!