gpt4 book ai didi

tcl - 无法使用期望生成(ssh)

转载 作者:行者123 更新时间:2023-12-04 06:46:16 26 4
gpt4 key购买 nike

在执行时

$expect filename.exp user pwd ip

我得到了错误

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


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

帮我继续
谢谢...

最佳答案

问题是 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 key 对并使用 ssh-agent来管理它。像这样,您不需要在任何命令行上传递密码;这很重要,因为进程的命令行是有关该进程的公共(public)信息。真的。您可以通过 ps -efww 之类的微不足道的内容找到它。 (或您的操作系统的等效项)。环境变量也同样不安全;有一个选项 ps也向他们展示。

关于tcl - 无法使用期望生成(ssh),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3733060/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com