如何设置 SSH 配置以获取 ssh 主机名的一部分并用作变量?

Jef*_*man 7 ssh

我正在通过 SSH 连接到多个设置相同的数据中心。每个数据中心都有一个 jumpbox,在其后面可以访问各种数据库服务器等。

当所有这些服务器的条目几乎相同时,除了 jumpbox IP 之外,手动为所有这些服务器指定条目是一件痛苦的事情。所以我想设置我的.ssh/config文件,以便我可以输入datacenter_name-server_behind_jumpbox并让 SSHdatacenter_name从主机的前端抓取(以便我可以在ProxyCommand.

例如,如果我想访问 datacenter1 中的 Maria 服务器,我会为 jumpbox 创建一个名为 的 SSH 条目datacenter1。然后对于它背后的 Maria 服务器,我会设置如下:

Host %dc%-maria
    Hostname maria
    User jeff
    ProxyCommand ssh -q -W %h:%p %dc
Run Code Online (Sandbox Code Playgroud)

这样我只需要为位于 jumpbox 后面的每种类型的服务器设置一个条目,它就会自动知道要命中哪个数据中心 jumpbox。

这样的事情可能吗?

小智 5

我使用不同的代理主机向主机名添加假后缀

Host *.dc1
    ProxyCommand ssh -q %r@dc1 -W %h:%p

Host *.dc2
    ProxyCommand ssh -q %r@dc2 -W %h:%p
Run Code Online (Sandbox Code Playgroud)

然后执行 ssh server1.dc1 之类的操作,它将使用代理主机。

您可以为自定义设置添加主机条目,如下所示:

Host server1.*
    User jeff
Run Code Online (Sandbox Code Playgroud)


lga*_*ini 4

您可以将脚本作为自定义 ProxyCommand 运行,并在真正的ProxyCommand之前完成工作:

.ssh/config:

Host *-maria
    Hostname maria
    User jeff          
    ProxyCommand /bin/datacenter_ssh.sh %h %p
Run Code Online (Sandbox Code Playgroud)

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
Run Code Online (Sandbox Code Playgroud)