我正在通过 SSH 连接多个设置相同的数据中心。每个数据中心都有一个跳转箱,后面可以访问各种数据库服务器等。
当这些服务器在数据中心之间几乎相同(除了跳转箱 IP)时,手动指定所有这些服务器的条目是一件很麻烦的事。因此,我想设置我的.ssh/config
文件,以便我可以键入datacenter_name-server_behind_jumpbox
并让 SSH 从主机前端抓取datacenter_name
(以便我可以在 中重复使用它)ProxyCommand
。
例如,如果我想访问 datacenter1 中的 Maria 服务器,我会为名为 的 jumpbox 创建一个名为 的 SSH 条目datacenter1
。然后对于它后面的 Maria 服务器,我会设置类似以下内容:
Host %dc%-maria
Hostname maria
User jeff
ProxyCommand ssh -q -W %h:%p %dc
这样,我只需要为位于跳转箱后面的每种类型的服务器设置一个条目,它就会自动知道要访问哪个数据中心跳转箱。
这样的事可能吗?
答案1
我在主机名中添加了一个假后缀,其中包含不同的代理主机
Host *.dc1
ProxyCommand ssh -q %r@dc1 -W %h:%p
Host *.dc2
ProxyCommand ssh -q %r@dc2 -W %h:%p
然后执行类似 ssh server1.dc1 的操作,它将使用代理主机。
您可以添加自定义设置的主机条目,如下所示:
Host server1.*
User jeff
答案2
您可以将脚本作为自定义 ProxyCommand 运行,并在真实的代理命令:
.ssh/config
:
Host *-maria
Hostname maria
User jeff
ProxyCommand /bin/datacenter_ssh.sh %h %p
datacenter_ssh.sh
:
#!/bin/bash
COMBINED=$1
DATACENTER=$(echo $COMBINED | cut -d'-' -f1)
SERVER=$(echo $COMBINED | cut -d'-' -f2)
PORT=$2
ssh -q -W $SERVER:$PORT $DATACENTER
答案3
我处于类似的情况并且做着这样的事情:
# configuration for the datacenter, can add entries for each datacenter
Host datacenter_name
HostName <datacenter_ip>
User <datacenter_user>
IdentityFile <datacenter_keyfile>
# usage match: datacenter_name-server_behind_jumpbox
Host *-*
User <server_behind_jumpbox user>
IdentityFile <server_behind_jumpbox keyfile>
Port <server_behind_jumpbox port>
ProxyCommand ssh $(echo %h | cut -d- -f1) nc $(echo %h | cut -d- -f2) %p"
当然你也可以做更多像你描述的那样的事情
# usage match: datacenter_name-maria, specify one for each server
Host *-maria
User <maria user>
IdentityFile <maria keyfile>
Port <maria port>
ProxyCommand ssh $(echo %h | cut -d- -f1) nc $(echo %h | cut -d- -f2) %p"