ssh 密钥:是给谁的以及应该放在哪里?

ssh 密钥:是给谁的以及应该放在哪里?

在阅读了有关 SSH 密钥生成和安装的内容后,我对这个想法感到非常困惑,这可能是我从所有信息中错误地收集到的:私钥离开了生成它的系统。

我将阐述我的理解。错误之处请指正:

  1. 在运行 SSH 服务器的主机上我运行ssh-keygen,它会为当前用户生成id-rsa和。id-rsa.pub
  2. 当前用户可以通过在#1 中生成的密钥进行验证的远程登录。
  3. id-rsa从#1 中取出并将其复制到运行 SSH 客户端的主机的文件系统中。
  4. 我在 SSH 客户端中注册了#3 中的文件。

这听起来与传统的非对称密钥加密不同,在非对称密钥加密中,私钥永远不会离开进行解密的系统。为什么只有一个私钥,为什么需要同时安装在服务器和客户端上?公钥使用哪种软件:SSH 服务器还是 SSH 客户端?

答案1

您对 ssh 的理解是错误的(而您对公钥/私钥的一般理解是正确的),可能是因为有人在与要使用密钥的机器不同的机器上生成密钥对 - 这种不良做法并不罕见。

ssh-keygen 创建公钥和私钥。

公钥(id_rsa.pub)被添加到远程系统 - 通常添加到/path/to/userhomedir/.ssh/authorized_keys文件中 - 每行 1 个公钥。

id_rsa文件是您的私钥,不会分发。

id_rsa.pub可以赠送给任何人并广泛传播。

远程系统不需要用户主目录中的 id_rsa 或 id_rsa.pub 来允许用户登录。只有当它是另一台服务器的客户端时才需要它。在第一次协商后,还有另一组主机密钥(通常在 /etc/ssh 中)用于防止 MITM 攻击,这些密钥通常是自动生成的,您无需担心。

答案2

为什么只有一个私钥,为什么需要同时在服务器和客户端上安装?

首先,它没有需要安装在服务器和客户端上。除了 SSH 客户端系统之外,您无需ssh-keygen在其他地方运行或复制“私有”id_rsa 文件。

实际上涉及两个私钥 - 一个是您ssh-keygen刚才生成的“用户”密钥对,另一个是服务器存储在中的“主机”密钥对/etc/ssh。(主机密钥对是在 SSH 服务器安装时生成的 - 它不是每个用户的。)

但从概念上讲,没有理由说不能只有一个密钥对,因为它们都不用于非对称加密——它们只用于签署:

  1. SSH 流量使用对称算法(例如 AES)进行加密 — 使用 DH 或 ECDH 密钥交换协议为每个连接协商新的对称加密密钥。(此过程中不使用客户端或服务器的非对称密钥;客户端甚至可能根本没有密钥。)

  2. 服务器使用其“主机”密钥对向客户端标识自己(这是您第一次连接时要求验证的指纹)并签署先前对称密钥交换的结果。

  3. 稍后在用户登录过程中,客户端将使用您的“用户”密钥对通过使用您的私钥进行自己的签名来识别您id_rsa,然后服务器根据存储在其证书中的相应公钥进行验证~/.ssh/authorized_keys

相关内容