共享SSH密钥

30

我在一个托管多个网站的服务器上使用私有SSH密钥和无密码登录功能来管理多个用户账户。

为了方便,我使用同一份私有密钥来管理所有用户账户(这是因为我懒?还是因为这样做是“正确”的?)

现在,我想要授权另一台可信任的电脑,但这台电脑位于不同的地方。如果我将我的~/.ssh目录复制到那台电脑上,它能直接工作吗?

另外,两台电脑是否能同时保持连接呢?

4个回答

36

更新:作为额外的安全建议,您应该为新机器生成一组新的密钥,并将您的新公钥发送到您在其上使用它的各个主机,而不是复制您的私钥。但是,如果您只是将所有内容移动到新计算机上,则可以将密钥带上,但请记得在旧计算机上彻底销毁它们。


正确的答案是从旧机器复制.ssh目录到新机器。这部分很容易(例如scp -r .ssh user@newmachinehost:~将起到作用——或者您可以逐个字符地输入键入,由您决定)。

但是,我认为回答这个问题所缺少的关键是在您将私钥复制到新机器后需要做什么。

对于每个密钥(我有三个不同的密钥用于各个组织),我都必须运行以下命令:

ssh-add .ssh/[key-filename]
如果省略文件名参数,则假定为id_rsa。完成每个密钥的此操作后(如果需要输入密码短语,则提示输入),ssh将能够使用这些密钥进行身份验证。否则,复制任何数量的密钥都没有用。SSH将忽略.ssh中的密钥,直到它们被明确使用(通过ssh -i [keyfilename] ...)。

3
非常感谢您提供的信息。我已经苦思冥想了好几天,想知道为什么其他所有东西都没问题,但我的钥匙仍然无法使用。谢谢!谢谢!谢谢! - Yazmin
1
为什么 ssh-add 不是永久性的,重启后就被遗忘了? - CMCDragonkai
ssh-add只是将密钥添加到当前环境中。如果您希望它保持不变,请查看ssh-agent,它作为守护程序运行,并在一个主密码下处理所有密钥。Mac OSX有一个更用户友好的ssh-agent类比,称为Keychain,在登录时解锁您的SSH密钥,并在后台实际运行和管理ssh-agent以无缝使用ssh。很棒。各种其他Linux窗口管理器也存在,但它们都只管理正在运行的ssh-agent。 - trisweb

9

这应该是可行的,两台机器应该能够同时保持连接 - 当硬盘崩溃时,我曾多次复制我的~/.ssh目录。


7

如果只是复制像authorized_keysconfigknown_hosts这些文件,那么在系统之间复制~/.ssh是可以的。如果你想让两个主机能够相互访问,每个主机都需要拥有自己的私钥,然后将其添加到另一个主机的authorized_keys文件中。

不要复制私钥以跨越多个系统!

想象现实中的秘密。每个知道这个秘密的人增加了曝光的机会。

每次将您的私钥复制到新系统时,由于复制的私钥比其所在的最弱系统更不安全(因为其他系统也不是无懈可击的),您的风险就会增加。

如果您的笔记本电脑被盗,您需要注销所有存储在其中的私钥(和保存的密码)。但是,当唯一登录服务器的方法是使用该密钥时,这会带来问题。最好记住在桌面上生成新密钥并将其安装在从旧密钥注销的每个系统上!

现在假设您的桌面被黑客入侵,并且某人在您不知情的情况下窃取了您的私钥。也许您已经在工作笔记本电脑和个人桌面之间共享了此密钥,但是您的桌面实际上并不需要访问您的工作系统(因为您有良好的工作/生活平衡)。攻击者现在甚至可以在未破坏您的笔记本电脑的情况下访问您的工作系统。工作中的信息安全团队强制要求您交出笔记本电脑以便进行审计,但经过一周的分析,他们什么也没发现。这并不好玩。

这些可能看起来很牵强附会,尤其是如果您不是主要目标(例如高管或系统管理员),但这只是一个好习惯,特别是考虑到为每个系统创建新密钥并将其公钥安装在每个适当的服务器上有多么容易(如果这似乎令人生畏,请考虑使用其中的一个配置文件传播系统。)

此外,这意味着您可以升级每个密钥的安全性以符合不断提高的标准。随着您退役旧系统并删除其密钥,您将旋转其较弱的密钥。(如果某些垃圾收集者找到了您的旧笔记本电脑并取消删除您的密钥,它们将不会授予任何访问权限。)


如果DNS在某些情况下可以解析到两个设备中的任何一个,那么在两台机器上使用相同的ssh密钥是否可接受?不使用相同的ssh密钥会导致各种问题。 - Michael
不在我看来,除非系统实际上同步彼此的数据(包括身份验证位,因为在这种情况下一个系统的妥协也是另一个系统的妥协)。您可以使用StrictHostKeyChecking yesCheckHostIP no(仅针对该FQDN!)解决此问题,然后手动将每个主机的密钥添加到您的~/.ssh/known_hosts文件中。如果您在SO上提出这个问题,请在这里提供链接,我会给您更详细的答案。这超出了本问题的范围。 - Adam Katz

0

只要不分享私钥,这是安全的。只需将公钥放在远程机器的~/.ssh/authorized_keys文件中,即可实现免密码登录。但请不要分享私钥。

这些密钥仅用于身份验证。只要能够使用该私钥进行一次登录,您可以任意多次使用相同的密钥进行登录。


不太是我要问的 - 我已经设置了与远程机器的无密码登录,但我想使用相同的私钥授权多台机器。 - Rich Bradshaw
这正是我回答的内容。你需要将你的公钥放置在任何你想要访问的远程机器上。你并没有分享私钥,而是分享了公钥。这就是为什么公钥是公开的原因:为了分享它们。 - wilhelmtell
我并不是想让我的电脑访问另外两台电脑,而是希望两台电脑能够相互访问。我会与我想要访问的电脑共享我的公钥,但如果我想让另一台电脑访问我已经可以访问的电脑,那么它需要一个私钥。通常情况下,我会为那台电脑生成另一个私钥,但我已经设置了大约50个帐户,并且希望避免将新的公钥添加到所有这些帐户中。如果这有意义的话! - Rich Bradshaw
啊,那我很抱歉,我误解了你。 - wilhelmtell

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接