先前定义的主机是否可以用作 .ssh/config 文件中使用 LocalForward 进行隧道配置的主机名?

先前定义的主机是否可以用作 .ssh/config 文件中使用 LocalForward 进行隧道配置的主机名?

所以,我有一堆只能通过堡垒主机访问的服务器。

但是,我的堡垒主机有一个随机变化的动态 IP。

为了通过 ssh 连接到各种服务器,我只需有一个 .ssh/config,其中的 ProxyJump 引用我的堡垒服务器的主机,这样我只需要在一处更改 IP。即:

Host preprod_jumphost
    Hostname 123.123.123.123
    Port 22
Host target_host1
    Hostname 201.201.201.201
    ProxyJump preprod_jumphost
Host target_host2
    Hostname 201.201.201.202
    ProxyJump preprod_jumphost

通过将 123.123.123.123 的 ip 更改为新的 ip,我的所有其他主机都得到正确更新。

但是,我有一些服务需要使用本地转发(主要是数据库)来连接,但我无法通过 SSH 连接到服务器。

我尝试在主机名中使用主机别名,例如:

Host db_preprod
        Hostname  preprod_jumphost
        LocalForward  5432 201.201.201.111:5432

然而,当我跑步时ssh db_preprod 我得到:

ssh:无法解析主机名 preprod_jumphost:名称或服务未知

如果我用动态 IP 替换主机名,如下所示:

Host db_preprod
        Hostname  123.123.123.123
        LocalForward  5432 201.201.201.111:5432

它有效。我可以ssh db_preprod并且psql -UYYY -d XXX -p 54332 -h localhost有效。

因为我有很多数据库和其他需要访问的服务,所以有没有办法preprod_jumphost在另一个主机中引用定义来进行各种LocalForward定义。这样,当堡垒主机的 IP 发生变化时,我就不需要更新一堆主机配置了?

虽然我知道我可以在 Host preprod_jump 主机中直接定义多个 LocalForward,但

Host preprod_jumphost
    User ubuntu
    Hostname 123.123.123.123
    Port 22
    LocalForward  5432 201.201.201.111:5432
    LocalForward  5433 201.201.201.122:5432
    LocalForward  5434 201.201.201.133:5432
    LocalForward  5435 201.201.201.144:5432

我不想在 ssh 到某个地方时让所有端口持续转发(尤其是对于我的生产环境)。我想在需要时明确启动 ssh 会话。

答案1

您可能想让这变得太复杂。只需将转发添加到目标主机配置即可。在转发时,不必担心 ProxyJump。ProxyJump 的工作方式意味着您可以为此目的忽略它,因为将要发生的转发将通过从您的机器到远程目标建立的 ssh 连接进行。

因此,使用下面的方法只需与 db_preprod 建立 ssh 连接,它将执行 ProxyJump,并进行转发。

Host preprod_jumphost
    Hostname 123.123.123.123
    Port 22
Host db_preprod
    ProxyJump preprod_jumphost
    Hostname 201.201.201.111
    LocalForward  5432 201.201.201.111:5432

因为我有很多数据库和其他需要访问的服务

您可以只进行一次 SOCKS 转发,然后通过 SOCKS 完成所有操作。Socks 代理的动态特性基本上意味着您可以通过 ssh 连接隧道传输任何 tcp 协议,而无需配置大量转发,前提是您拥有能够使用 SOCKS 的客户端软件。

Host preprod_jumphost
    Hostname 123.123.123.123
    Port 22
    DynamicForward 8888

相关内容