我的 ssh 配置文件中有此配置,
Host *+*
ProxyCommand ssh $(echo %h | sed -e 's/+[^+]*$//;s/\([^+=]*\)=\([^+]*\)$/\2 -l \1/; s/^\([^+:]*\):\([0-9]*\)+/-p \2 \1+/') -W $(echo %h | sed -e 's/^.*+//; s/:.*$//;'):$(echo %h | sed -e 's/^.*+//; /:/!s/^.*/22/; s/^.*://' ;)
这允许我进行一些基本的主机跳转,例如:
ssh host1+host2 # will ssh into host2 via host1
为什么要对LocalForward
命令 ( -L
) 执行相同的操作?我尝试过类似的方法,但没有成功
Host host1+*
user root
Hostname %h
ProxyCommand ssh host1 -W %h:%p
LocalForward 0.0.0.0:8080 $(echo %h | awk -F'+' '{print $2}'):80
提前致谢,
答案1
这SSH 配置文件不获取或评估 shell 代码。
您的第一件事起作用的原因是它是由 shell 作为代理命令调用的一部分执行的。
但我想LocalCommand
可能会以与调用代理命令类似的方式使用ssh -f -L...
。我从来没有这样做过,也没有见过这样做。也可以看看PermitLocalCommand
。