我有我的~/.ssh/configconfiguration了不同的主机,可以在我们公司的VPN或通过SSH代理服务器访问。
目前我只有
Host internal-server ProxyCommand ssh -W internal.ip:22 external-server
但是,如果我在内部networking,我可以直接访问内部的IP,所以通过外部服务器的代理只是延迟连接。
有没有一种方法,我可以临时代理,如果内部IP不可达,否则直接连接?
我通常设置这样的东西。 它假定中间主机将能够parsing名称。
Host *%homeproxy ProxyCommand ssh user@proxyhost /bin/netcat -w 1 $(echo %h | cut -d%% -f1) 22
所以我会连接到像ssh blah%homeproxy 。
十年前,我为这种场景写了一个代理命令 。 在你的使用情况下,我的代理命令可以像这样使用:
Host internal-server ProxyCommand ssh-multipath-proxy %h:%p -- ssh -W %h:%p external-server
一些注意事项:我有些尴尬地承认,它不处理IPv6,并且它将只尝试每个主机名的一个IP地址。 而且,在服务器标题发送之前,它不会将客户横幅传送到服务器。 但这不太可能造成问题。
如果你不在防火墙的后面并且防火墙不拒绝,这个工作会稍微自动一点点,并延迟1秒。
Host proxyhost.example.com ProxyCommand none Host *.example.com ProxyCommand sh -c "nc -w 1 %h %p || ssh -W %h:%p proxyhost.example.com"