ssh-按需通过 API 查找 IP

ssh-按需通过 API 查找 IP

有没有办法让 ssh 通过外部 API 动态查找给定主机名的 ip 地址?

场景是,我有几个客户,他们拥有数千个不同的按需云服务器(每小时都会添加新的服务器,每小时都会关闭旧的服务器)。

由于名称太多并且变化很快,使用云服务 DNS API 并不是一个真正的选择(我之前尝试过,杀死了他们的管理面板和 API 服务器)。

所以...我在 ssh 中寻找一个配置选项,以便在执行“ssh some-name”时使用脚本查找 IP 地址。我知道我可以为 ssh 脚本设置别名并包装它,但我想知道是否有任何可用的内部选项。

答案1

有多种选择。主要是ProxyCommand,它可以使用任意程序代替 TCP 连接 - 只要它在 stdin/stdout 中使用 SSH。(当然它只适用于 SSH。)

例如,通过另一个 SSH 服务器建立隧道:

ssh -o ProxyCommand="ssh bastion.tld -W %h:%p" server123.tld

因此,您可以用您喜欢的语言编写一个工具/脚本,它接受命令行中的主机名,查找服务器,打开 TCP 连接,并在它和 stdin/out 之间复制数据。(它可以是一个运行的 shellscript nc。)

然后像这样使用它:

# ~/.ssh/config – see `man ssh_config`

Host *.example.com
    ProxyCommand ~/bin/ssh-cloud-lookup %h %p

第二种选择是编写一个自定义 DNS 服务器,使用容器 API 来查找地址并提供响应。我相信我见过一些工具(如 Chubby)就是这样做的。


第三个选项(特定于 Linux)是编写一个“nsswitch”插件来实现主机名查找,类似于现有的“dns”、“mdns”、“files”插件。例如,systemd 附带一个名为的插件,nss_mymachines用于解析 nspawn 容器的名称。

相关内容