在办公室,我可以不用代理连接内部机器,但是外部连接需要一个代理。在办公室之外,我可以在没有代理的情况下连接到其他外部机器,但需要使用 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/
小智 1
编写一个 shell 脚本,根据模式检查您的 IP,然后符号链接相应的 shell 脚本。
如果由于某种原因您的家庭和工作 IP 范围相同,请尝试根据 /etc/resolv.conf 进行切换,其中包含 DHCP 配置的 DNS 服务器。
归档时间: |
|
查看次数: |
4628 次 |
最近记录: |