![使用 SSH 连接到 IP 未知的机器](https://linux22.com/image/795679/%E4%BD%BF%E7%94%A8%20SSH%20%E8%BF%9E%E6%8E%A5%E5%88%B0%20IP%20%E6%9C%AA%E7%9F%A5%E7%9A%84%E6%9C%BA%E5%99%A8.png)
我将帮助设置一组(超过 50 台)分布在不同地理位置和不同网络的机器。因此,我无法预先知道每台机器的 IP 地址。我将能够在部署机器之前向机器添加任何软件。最重要的是,我需要能够在部署机器后不时通过 ssh 进入每台机器以更新它们。
有没有一个软件包可以帮助我管理所有这些机器?有没有办法让我设置一些东西,让它们时不时地“打电话回家”并跟踪它们的 IP 地址?有没有一个词可以让我通过 Google 搜索来帮助解决这个问题?
答案1
这正是 DNS 所擅长的,而 IP 地址则不擅长。如果您将每台主机设置为具有单独的主机名,并在每次连接到网络时向中央服务器进行动态 DNS 更新,那么您将始终能够 ssh 到(例如)server43.dynamic.example.com
。
从上面的例子可以看出,如果您这样做,我建议为这些动态主机委派一个子区域,以避免任何人污染您的主 DNS。
编辑:首先,你要选择域名。假设你可以从主公司域名中获取一个子域名,比如说sub.example.com
。
然后,你会得到一些 DNS 服务器;两个是不错的选择。也许你可以搭载公司服务器,也许你必须获得几个 VPS 或从有线索的人那里租用 NS 托管。你让你公司的 DNS 人员委托sub.example.com
给这些服务器。
然后,您将所有客户端配置为在该子域中对这些名称服务器执行 DDNS 更新。您为它们设置有效的密钥以执行 TSIG 更新,并将主服务器设置为接受动态更新,但前提是必须正确签名。
当客户端上线时,例如client33
,它会对进行如上所述的 DDNS 更新client33.sub.example.com
。您的中央传播盒可以随时通过 ssh 连接到,并client33.sub.example.com
知道地址将是最新的。
答案2
您可以打电话回家一个非常简单的 ssh 密钥解决方案。
在部署之前,在每个远程主机上设置一个技术用户。
这些用户拥有一个密钥对 (ssh-genkey),公钥已添加到您家庭服务器上的授权主机。除此之外,您还需要设置一个 cronjob,每小时尝试登录家庭服务器一次并注册其 IP 地址。
那个怎么样?
答案3
puppet 可能会帮你解决这个问题,但是自己开发的解决方案可能包括:
在中央服务器(最好是 chroot jail'ed)上创建一个帐户并设置一个 SSH 密钥。将私钥分发给所有客户端,并在 cron 中使用该密钥将它们设置为 SSH 到中央服务器:
ssh -i /home/user/.ssh/id_rsa_key_for_central_server user@centralserver “echohostname
在 $ipaddress >> sometracking.file”
答案4
您可以使用 SSH 反向隧道。示例:
http://abechik.wordpress.com/2007/04/18/persistant-ssh-reverse-tunnel-connection/
对于每个客户端使用不同的端口,因此您可以使用以下方式连接:
ssh localhost -p <client_port>