网络相关的 ~/.ssh/config?

网络相关的 ~/.ssh/config?

在办公室里,我可以不使用代理连接到内部机器,但需要使用代理才能连接到外部机器。在办公室外,我可以不使用代理连接到其他外部机器,但需要使用 2 个代理之一才能连接到内部机器。

如果我能找到一种方法来自动检测我所在的网络,我可以指示 ssh 加载适当的配置文件吗?

如果没有,有没有比编写 shell 脚本将适当的配置文件符号链接到 ~/.ssh/config 更优雅的解决方案(这是我迄今为止最好的想法)?

编辑:我认为@pcm 和 JonnyRo 理解了我的问题,我会尝试他们的建议,但为了清楚起见,我想要

|--------\    Dest   | abc.example.com | xyz.external.org |
| Source  \---------\|                 |                  |
|--------------------+-----------------+------------------|
| example.com office | No Proxy        | Proxy            |
| outside            | Proxy           | No Proxy         |

答案1

根据代理的配置方式,您可以简单地构建一个适用于任何情况的 SSH 配置条目。例如,在我经常使用的网络上,我必须先 ssh 到中间主机,然后才能建立出站连接。所以基本上我设置了一个如下所示的配置。

# proxy ssh 
Host *%sshproxy
    ProxyCommand ssh [email protected] /bin/netcat -w 1 $(echo %h | cut -d%% -f1) 22

Host myhost.example.org
    HostName 172.16.24.1

Host otherhost.example.com
    HostName 192.168.57.12

因此,当我不需要使用代理时,我可以简单地运行类似的命令ssh myhost.example.org并连接,但是当我确实需要代理时,我会运行命令ssh myhost.example.org%sshproxy

我怀疑您可能设置了某种别名或自动完成设置,可以自动附加该%proxy位。

答案2

老问题,但这个帖子中的一些想法对我有帮助,这是我想到的解决方案:

首先,代理服务器ssh 配置。

Match Originalhost proxy Exec "ifconfig | grep 10.0.1"
     Hostname 10.0.1.2
Host proxy 
     Hostname external.hostname.com

然后,服务器 B配置:

Match Originalhost server-b Exec "ifconfig | grep 10.0.1"
     ProxyCommand none
Host server-b
     Hostname 10.0.1.3
     ProxyCommand ssh -W %h:%p server-a

这里的想法是,默认情况下是从外部站点连接,并且 ProxyCommand 启动到代理人首先然后连接到服务器-b。另一方面,如果我们已经位于本地子网,ProxyCommand 将被禁用,并且没有代理连接到服务器-a已制作完成。

无论你身在何处,你都可以随时联系服务器-abc通过此条目和此设置可以确定您所在的位置并相应地设置连接。对于服务器-xyz,就用同样的想法。

我在这里做了更详尽的解释: http://blog.kihltech.com/2017/04/ssh-conditional-host-address-based-on-network-or-location/

答案3

您可以使用 -F 选项从不同的配置文件中进行选择。适用于两种网络情况。然后,您可以根据您所在的网络创建使用不同配置文件的别名,或者根据您的 IP 地址在登录脚本中设置单个别名。

答案4

.ssh/config 中的“Host”选项允许您根据目的地更改配置。我使用它来根据要去的地方调整端口转发等。

相关内容