按预期生成 ssh 时的问题({$var} 与“$var”)
Issues when spawn'ing ssh on expect ( {$var} vs. "$var" )
我有一个 expect 脚本,到目前为止它运行良好......它在现有的 ssh 隧道上生成一个 ssh 会话,如下所示:
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"
我有一个 expect 脚本,到目前为止它运行良好......它在现有的 ssh 隧道上生成一个 ssh 会话,如下所示:
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"