当我在某个网络(子网为 10.10.11.x)上时,我需要跳过中间主机才能到达目的地,因为我无法更改目的地端口,并且可以退出受限网络的端口有限。我成功地使用了如下所示的 ssh 配置:
Host web-direct web
HostName web.example.com
Port 1111
Host web-via-jump jweb
HostName web.example.com
Port 1111
ForwardAgent yes
ProxyCommand ssh -p 110 -q relay.example.com nc %h %p
通过跳转箱会对性能造成重大影响,因此在大多数不需要的情况下我需要避免它。切换 ssh/scp/rsync 主机昵称对于交互式使用来说很好,但是有一些自动化/脚本化任务,这是非常痛苦的。
我的 shell 在网络转换期间保持打开状态,因此启动 (.zshrc) 机制没有帮助。
我想过运行一个脚本来轮询受限子网,并通过修改 .ssh/config 文件来自动进行切换,但我什至不确定是否会存在缓存问题。在实施之前,我想我会问是否有更好的方法。
基于源主机子网检测交换 ssh 配置的最佳方法是什么?
在伪配置中,类似:
if <any-active-local-interface> is on 10.10.11.x:
Host web
HostName web.example.com
Port 1111
ForwardAgent yes
ProxyCommand ssh -p 110 -q relay.example.com nc %h %p
else:
Host web
HostName web.example.com
Port 1111
endif
您可以使用Match https://man.openbsd.org/ssh_config.5#Match's exec
执行 shell 命令的选项,因此您可以编写如下内容:
Match host web exec "hostname -I | grep -qF 10.10.11."
ForwardAgent yes
ProxyCommand ssh -p 110 -q relay.example.com nc %h %p
Host web
HostName web.example.com
Port 1111
The Match
选项布尔逻辑可以短路,所以把host
首先要跳过exec
其他主机的术语。尝试ssh web -vvv
看到Match
行动中的逻辑。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)