我有一台机器,说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
.