如何使用私钥在新机器上设置无密码 ssh

如何使用私钥在新机器上设置无密码 ssh

我有一台机器,说source1有无密码 ssh 已经设置为超过 100 个服务器, 说remote1,,remote2...。remote100

现在我需要在另一台服务器上设置类似的无密码 ssh 设置source2,并且我不想将公钥复制到source2所有一百台服务器的authorized_keys 文件中。

我可以使用服务器的私钥source1来进行类似的设置source2吗?如何实现这一目标?我听说ssh-agent是其中一种方式,但对步骤不太了解。

答案1

如果您的所有遥控器都有自己的根用户(即不同的/root目录)和自己的authorized_keys文件,则您需要编辑所有这些文件才能添加新密钥:

for remote in $(seq 100); do 
    cat public_key.pub | ssh "remote$remote" tee -a .ssh/authorized_keys
done

但是,您也可以将 source1 的私钥发送到 source2。这样,两台机器将使用相同的密钥对(所有遥控器都已注册)。我不认为这会产生任何类型的冲突,但拥有两把钥匙对我来说似乎更自然。事实是,由于您的所有计算机可能位于同一网络上,并由同一用户管理,因此一个密钥被泄露可能会破坏整个系统。因此,拥有两个并不会带来更多的安全性(因为一个足以成为某个地方的根)。

答案2

采取的方法取决于具体场景。如果所有服务器上的用户已有一个密钥,authorized_keys可以在将新密钥添加到远程主机时用于进行身份验证,那就最好了,否则您必须为每个主机输入密码。

自动将 ssh 密钥复制到远程计算机的最简单方法是使用ssh-copy-id,如果您有remote1通过remote100它调用的服务器,则可以使用如下所示的方法来完成:

for server in $(seq -f 'remote%.0f' 1 100); do
    ssh-copy-id -i ~/.ssh/id_rsa "$server"
done

这会自动将 的公钥id_rsa按顺序 ssh 到所有服务器中,并将公钥添加到 中authorized_keys。如果这是您在服务器上拥有的唯一密钥,系统将提示您输入密码来添加它们,因为程序ssh-copy-id需要实际 ssh 到服务器。

进一步自动化的一种方法是使用类似expect使用密码自动登录的方法,因为 OpenSSH 的 ssh 客户端没有指定密码的命令行选项,或者使用像sshpass.

相关内容