我在一个托管多个网站的服务器上使用私有SSH密钥和无密码登录功能来管理多个用户账户。
为了方便,我使用同一份私有密钥来管理所有用户账户(这是因为我懒?还是因为这样做是“正确”的?)
现在,我想要授权另一台可信任的电脑,但这台电脑位于不同的地方。如果我将我的~/.ssh目录复制到那台电脑上,它能直接工作吗?
另外,两台电脑是否能同时保持连接呢?
我在一个托管多个网站的服务器上使用私有SSH密钥和无密码登录功能来管理多个用户账户。
为了方便,我使用同一份私有密钥来管理所有用户账户(这是因为我懒?还是因为这样做是“正确”的?)
现在,我想要授权另一台可信任的电脑,但这台电脑位于不同的地方。如果我将我的~/.ssh目录复制到那台电脑上,它能直接工作吗?
另外,两台电脑是否能同时保持连接呢?
更新:作为额外的安全建议,您应该为新机器生成一组新的密钥,并将您的新公钥发送到您在其上使用它的各个主机,而不是复制您的私钥。但是,如果您只是将所有内容移动到新计算机上,则可以将密钥带上,但请记得在旧计算机上彻底销毁它们。
正确的答案是从旧机器复制.ssh
目录到新机器。这部分很容易(例如scp -r .ssh user@newmachinehost:~
将起到作用——或者您可以逐个字符地输入键入,由您决定)。
但是,我认为回答这个问题所缺少的关键是在您将私钥复制到新机器后需要做什么。
对于每个密钥(我有三个不同的密钥用于各个组织),我都必须运行以下命令:
ssh-add .ssh/[key-filename]
如果省略文件名参数,则假定为id_rsa
。完成每个密钥的此操作后(如果需要输入密码短语,则提示输入),ssh将能够使用这些密钥进行身份验证。否则,复制任何数量的密钥都没有用。SSH将忽略.ssh中的密钥,直到它们被明确使用(通过ssh -i [keyfilename] ...
)。这应该是可行的,两台机器应该能够同时保持连接 - 当硬盘崩溃时,我曾多次复制我的~/.ssh
目录。
如果只是复制像authorized_keys
、config
和known_hosts
这些文件,那么在系统之间复制~/.ssh
是可以的。如果你想让两个主机能够相互访问,每个主机都需要拥有自己的私钥,然后将其添加到另一个主机的authorized_keys
文件中。
不要复制私钥以跨越多个系统!
想象现实中的秘密。每个知道这个秘密的人增加了曝光的机会。
每次将您的私钥复制到新系统时,由于复制的私钥比其所在的最弱系统更不安全(因为其他系统也不是无懈可击的),您的风险就会增加。
如果您的笔记本电脑被盗,您需要注销所有存储在其中的私钥(和保存的密码)。但是,当唯一登录服务器的方法是使用该密钥时,这会带来问题。最好记住在桌面上生成新密钥并将其安装在从旧密钥注销的每个系统上!
现在假设您的桌面被黑客入侵,并且某人在您不知情的情况下窃取了您的私钥。也许您已经在工作笔记本电脑和个人桌面之间共享了此密钥,但是您的桌面实际上并不需要访问您的工作系统(因为您有良好的工作/生活平衡)。攻击者现在甚至可以在未破坏您的笔记本电脑的情况下访问您的工作系统。工作中的信息安全团队强制要求您交出笔记本电脑以便进行审计,但经过一周的分析,他们什么也没发现。这并不好玩。
这些可能看起来很牵强附会,尤其是如果您不是主要目标(例如高管或系统管理员),但这只是一个好习惯,特别是考虑到为每个系统创建新密钥并将其公钥安装在每个适当的服务器上有多么容易(如果这似乎令人生畏,请考虑使用其中的一个配置文件传播系统。)
此外,这意味着您可以升级每个密钥的安全性以符合不断提高的标准。随着您退役旧系统并删除其密钥,您将旋转其较弱的密钥。(如果某些垃圾收集者找到了您的旧笔记本电脑并取消删除您的密钥,它们将不会授予任何访问权限。)
StrictHostKeyChecking yes
和CheckHostIP no
(仅针对该FQDN!)解决此问题,然后手动将每个主机的密钥添加到您的~/.ssh/known_hosts
文件中。如果您在SO上提出这个问题,请在这里提供链接,我会给您更详细的答案。这超出了本问题的范围。 - Adam Katz只要不分享私钥,这是安全的。只需将公钥放在远程机器的~/.ssh/authorized_keys文件中,即可实现免密码登录。但请不要分享私钥。
这些密钥仅用于身份验证。只要能够使用该私钥进行一次登录,您可以任意多次使用相同的密钥进行登录。