所以,我有一堆只能通过堡垒主机访问的服务器。
但是,我的堡垒主机有一个随机变化的动态 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