使用 SSH 连接到 IP 未知的机器

使用 SSH 连接到 IP 未知的机器

我将帮助设置一组(超过 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>

相关内容