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

Nat*_*ons 18 linux ssh

在办公室,我可以不用代理连接内部机器,但是外部连接需要一个代理。在办公室之外,我可以在没有代理的情况下连接到其他外部机器,但需要使用 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         |
Run Code Online (Sandbox Code Playgroud)

Zor*_*che 11

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

# proxy ssh 
Host *%sshproxy
    ProxyCommand ssh user@proxyhost.example.org /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
Run Code Online (Sandbox Code Playgroud)

所以当我不需要使用代理时,我可以简单地运行一个命令ssh myhost.example.org并连接,但是当我需要代理时,我运行命令ssh myhost.example.org%sshproxy

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


小智 9

老问题,但这个线程中的一些想法帮助了我,这是我想出的解决方案:

一、代理服务器ssh配置。

Match Originalhost proxy Exec "ifconfig | grep 10.0.1"
     Hostname 10.0.1.2
Host proxy 
     Hostname external.hostname.com
Run Code Online (Sandbox Code Playgroud)

然后,Server 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
Run Code Online (Sandbox Code Playgroud)

这里的想法是默认情况下是从外部站点连接并且 ProxyCommand 首先启动到代理的 ssh 连接,然后连接到server-b。另一方面,如果我们已经位于本地子网中,则 ProxyCommand 将被禁用,并且不会建立到服务器 a 的代理连接。

无论您身在何处,您始终可以通过此条目访问server-abc,此设置会确定您的位置并相应地设置连接。对于server-xyz,只需使用相同的想法。

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


小智 7

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


小智 1

编写一个 shell 脚本,根据模式检查您的 IP,然后符号链接相应的 shell 脚本。

如果由于某种原因您的家庭和工作 IP 范围相同,请尝试根据 /etc/resolv.conf 进行切换,其中包含 DHCP 配置的 DNS 服务器。