![SSH:客户端托管私有 RSA 密钥是否安全?](https://linux22.com/image/654921/SSH%EF%BC%9A%E5%AE%A2%E6%88%B7%E7%AB%AF%E6%89%98%E7%AE%A1%E7%A7%81%E6%9C%89%20RSA%20%E5%AF%86%E9%92%A5%E6%98%AF%E5%90%A6%E5%AE%89%E5%85%A8%EF%BC%9F.png)
在服务器上生成公钥/私钥对,将公钥添加到authorized_keys列表,然后将私钥复制到每个客户端,如下所述,这样安全吗(http://www.rebol.com/docs/ssh-auto-login.html)假设您对每个客户端保持永久控制?(即同一个用户,多台计算机)。
典型的过程是在客户端生成公钥/私钥对,然后将客户端的公钥添加到服务器上的authorized_keys列表中,如下所述(http://www.linuxproblem.org/art_9.html)。使用此方法,如果您有多台客户端计算机,则必须将每台计算机连接到authorized_keys列表并随时间进行维护。
答案1
恭喜,您找到了一个包含错误建议的网络教程。
在多台计算机上使用单个密钥对的问题出现在任何人的计算机被盗用。那么你别无选择,只能撤销密钥对到处并为使用该密钥对的每台计算机重新设置密钥。您应该始终为每台计算机和每个用户使用唯一的密钥对,以限制密钥泄露可能造成的损害。
至于那个教程,在服务器并将私钥复制到客户。这完全是倒退的。相反,密钥对应该在客户并将公钥复制到服务器。甚至有一个辅助脚本ssh-copy-id
可以完成此操作,并在此过程中确保所有权限正确,客户端获取服务器的主机密钥等。
确实存在您想要集中管理用户身份密钥的情况,例如对于自动化脚本,但在这种情况下,您确实应该从第三个主机执行此操作,或者理想情况下从配置管理系统(如 puppet)执行此操作。
答案2
该教程中描述的协议的最大问题是它没有指定如何以安全的方式(即防止窃听)“将私钥下载到客户端计算机”。如果您还没有安全通道,则密钥可能会通过 Internet(HTTP、FTP、电子邮件等)以明文形式传输。您可以使用 HTTPS,但如果您没有真正的证书,则可以通过 MITM 嗅探密钥。只需按您应该的方式进行即可;在客户端计算机上生成密钥对,将公钥传输到服务器,并且不要忘记验证文件的校验和以确保它在传输过程中没有被修改。