取决于网络的〜/ .ssh / config?


15

在办公室,我可以不使用代理连接到内部计算机,但是需要用于外部连接的代理。在办公室之外,我可以不使用代理连接到其他外部计算机,但是需要使用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         |

Answers:


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

因此,当我不需要使用代理时,我可以简单地运行像这样的命令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

然后,服务器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首先启动ssh连接到proxy,然后再连接到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地址设置一个别名。


谢谢!如果我无法使基于IP的脚本正常工作,则带有-F的别名无疑是我的后备。
内特·帕森斯

这太棒了,我正要问同样的问题。在启动新终端时,我已经编写了一些其他选项来设置环境变量,因此我可以轻松创建别名或根据环境符号链接正确的.ssh / config。
newz2000

1

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

如果出于某种原因,您的IP地址范围对于家庭和工作场所而言相同,请尝试基于/etc/resolv.conf进行切换,该文件包含DHCP配置的DNS服务器。


0

.ssh / config中的“主机”选项可让您根据目标更改配置。我用它来调整端口转发,并根据我要去的地方进行调整。


0

我过去曾研究过此问题,一种可能的解决方案是在配置文件中添加以下条目:

Host ENTRY_POINT
Hostname ENTRY_POINT_FQDN
User USERNAME

Host *.INSIDE_DOMAIN
ProxyCommand ssh ENTRY_POINT nc %h %p

这样,如果您在外面,则可以$ ssh machine.inside_domain。如果您在内部并且可以解析dns,则可以使用$ ssh机器。对我来说很好。

也许有人可以对此想法进行改进,也许可以更改DNS配置,以便如果您在外面并使用SSH入口点,它将自动将计算机解析为machine.inside_domain。

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.