执行时
$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帮我继续
谢谢..。
发布于 2010-09-17 08:11:27
问题是,spawn需要命令及其作为多个Tcl参数传递给它的参数,就像标准的Tcl exec命令一样。解决办法是直接这样做:
spawn ssh -l $OMC_Usr $OMC_IP或者,如果你喜欢(而且你有TCL8.5):
set cmd "ssh -l $OMC_Usr $OMC_IP"
spawn {*}$cmd或者,如果你有8.4岁或以前:
eval spawn [lrange $cmd 0 end]但是不这样做:
eval spawn $cmd因为如果用户名中有Tcl元字符(或IP地址,但这是非常不可能的),这将意外地中断。
当然,真正的解决办法是设置一个RSA密钥区并使用ssh-agent来管理它。这样,您就不需要在任何命令行上传递密码;这很重要,因为进程的命令行是有关进程的公共信息。真的。您可以通过一些琐碎的东西(如ps -efww (或与您的操作系统等效的)找到它。环境变量也同样不安全;ps也有一个选项来显示它们。
https://stackoverflow.com/questions/3733060
复制相似问题