简单的 SSH 公钥/私钥问题

简单的 SSH 公钥/私钥问题

我正在努力学习这一点,而不是仅仅遵循指南,这样当人们询问时(他们确实会问),我就可以推荐适当的行动。以下是我得到的。

首先,使用以下命令生成两个密钥:

ssh-keygen -b 2048 -t rsa -C comment -f ~/.ssh/id_rsa

然后将密钥的公共部分推送到authorized_keys2文件中

cat ~/.ssh/id_rsa.pub >> ~/.ssh/authorized_keys2

(然后将其 chmod 为 600 或类似值)

然后将私钥下载到您的计算机(id_rsa)并将其输入到Putty中进行读取和验证。

这些是设置此公钥/私钥认证以实现无密码登录 SSH 的正确步骤吗?

答案1

虽然您描述的步骤可行,但存在一个问题。您正在目标(远程)计算机上生成密钥对,然后将私钥文件下载到本地系统。这里有一些您不应忽视的安全隐患:

  • 如果遥控器已经被破解,那么有人可能已经获取了您的密码。
  • 如果远程系统将来受到威胁,攻击者将可以访问您的私钥文件(并可以使用离线暴力攻击来尝试解密)。

由于您使用 ssh 密钥对(尝试)解决密码验证中固有的一些问题,因此您通常希望按照以下步骤操作:

  • 在本地系统上生成密钥对。理想情况下,私钥 (a) 永远不会存储在共享文件系统(例如 NFS 主目录)上,并且 (b) 永远不会存储在允许远程登录的计算机上。

  • 广泛发布公钥。我将公钥保存在网站上,以便随时可以获取。将公钥放入authorized_keys您要连接的系统上的相应文件中。

如果你特别偏执,你可以将私钥存储在拇指驱动器上,并且只使用该驱动器将密钥加载到正在运行的程序中ssh-agent。此时,你不再需要实际的密钥文件。

答案2

在客户端系统上生成密钥可能更好。您最终可能会得到更大的 authorized_keys 文件,但禁用受感染的系统更容易。如果您迁移服务器的私钥,则需要重新生成密钥并将其迁移到所有客户端系统。每个客户端都应该有自己的密钥。

Putty 用于puttygen生成密钥。puttygen还将以正确的格式提供公钥,以便粘贴到客户端系统中。如果要使用密钥进行登录访问,最好使用密码保护密钥。 Pageant或者ssh-agent可用于将未受保护的密钥保存在内存中,这样就不需要在每次连接时重新输入密码。

添加一个密钥并设置保护后,您可以添加其他密钥,但需要重置权限。我通常从系统上传公钥,其名称为,例如,example.pub其中 example 是密钥所属系统的名称。

许多实现已恢复使用authorized_keys密钥文件。此文件可用于限制接受密钥的系统、强制运行命令、限制访问等。查看页面man了解更多详细信息。

在某些情况下,在客户端系统上拥有多个密钥可能会很有用。这可以支持使用没有密码的密钥运行的批处理过程。

答案3

看起来不错。许多人会以相反的方向进行操作(在本地生成密钥,然后将其推.pub送到服务器),但两种方法都可以。

相关内容