首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >无法使用expect生成(Ssh)

无法使用expect生成(Ssh)
EN

Stack Overflow用户
提问于 2010-09-17 06:21:40
回答 1查看 3.8K关注 0票数 2

执行时

代码语言:javascript
复制
$expect filename.exp user pwd ip

我得到了错误

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

filename.exp的内容如下:

代码语言:javascript
复制
#!/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

帮我继续

谢谢..。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2010-09-17 08:11:27

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

代码语言:javascript
复制
spawn ssh -l $OMC_Usr $OMC_IP

或者,如果你喜欢(而且你有TCL8.5):

代码语言:javascript
复制
set cmd "ssh -l $OMC_Usr $OMC_IP"
spawn {*}$cmd

或者,如果你有8.4岁或以前:

代码语言:javascript
复制
eval spawn [lrange $cmd 0 end]

但是这样做:

代码语言:javascript
复制
eval spawn $cmd

因为如果用户名中有Tcl元字符(或IP地址,但这是非常不可能的),这将意外地中断。

当然,真正的解决办法是设置一个RSA密钥区并使用ssh-agent来管理它。这样,您就不需要在任何命令行上传递密码;这很重要,因为进程的命令行是有关进程的公共信息。真的。您可以通过一些琐碎的东西(如ps -efww (或与您的操作系统等效的)找到它。环境变量也同样不安全;ps也有一个选项来显示它们。

票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/3733060

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档