linux - 按预期生成 ssh 时的问题({$var} 与 "$var")

标签 linux ssh tcl expect

我有一个 expect 脚本,到目前为止它运行良好......它在现有的 ssh 隧道上生成一个 ssh session ,如下所示:

spawn ssh -o UserKnownHostsFile=/dev/null -o StrictHostKeyChecking=no -o {ProxyCommand=nc -X 5 -x localhost:8888 %h %p} "$user_ip"

$user_ip有用户名和目标 IP,如 ssh 所期望的,如 username@IP

问题是有时端口 8888 被另一个 ssh 隧道使用,每次发生这种情况我都必须调整代码并更改隧道端口。

因此,我试图在变量中发送端口,以避免一直触及代码。 我从命令行获取隧道端口,如:

set proxy_port [lindex $argv 2]

然后

spawn ssh -o UserKnownHostsFile=/dev/null -o StrictHostKeyChecking=no -o {ProxyCommand=nc -X 5 -x localhost:"$proxy_port" %h %p} "$conn"

我看到 proxy_port 变量设置正确,但是当脚本尝试生成 ssh 时,我得到:

 spawn ssh -o UserKnownHostsFile=/dev/null -o StrictHostKeyChecking=no -o {ProxyCommand=nc -X 5 -x localhost:8888 %h %p}  USERID@10.0.0.1
command-line line 0: garbage at end of line; "-o".
send: spawn id exp5 not open
    while executing
"send "$pwd\r""
    (file "./amm-qev.new.exp" line 36)

在上面的错误中,我看到端口已正确替换,但它提示 ssh 语法。

有什么问题,我的眼睛没看清?

最佳答案

Tcl 的 {...} 语法类似于 shell 中的单引号字符串 ('...'),其中 $var不会扩大。您应该使用双引号。

spawn ssh -o UserKnownHostsFile=/dev/null \
          -o StrictHostKeyChecking=no \
          -o "ProxyCommand=nc -X 5 -x localhost:$proxy_port %h %p" \
          "$conn"

关于linux - 按预期生成 ssh 时的问题({$var} 与 "$var"),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44568947/

相关文章:

tcl - 删除 Tcl 命令中的文件路径和扩展名

tcl - 将TCL TK转换为独立应用程序的最简单步骤

linux - 重命名并增加重复项

c# - 尽管安装了 Mono,但 Unity 中的 Monodevelop 找不到系统引用

linux - 写权限问题

ssh - 如何在互联网连接不稳定的情况下使用 SSH?

shell - ssh循环问题

linux - 使用 putty 从 windows scp 到 Linux

tcl - 将秒转换为时分秒格式

linux - Ubuntu 升级,Perl 版本损坏 ZImbra