SSH:/etc/ssh/[host files] 和 ~/.ssh/[public key] 之间有什么区别或相互作用

信息安全 密码学 公钥基础设施 SSH
2021-08-20 14:19:13

在涉足 Ubuntu 和其他 Linux 版本十年之后,我是 SSH 的新手。今天我成功设置了 SSH,但在此过程中我遇到了一些挂断和头痛。虽然系统现在运行正常,但我不完全确定它是如何工作的,这让我很生气。

我有一段时间遇到的主要头痛是:

  1. 我会通过 OS X 和“ssh”命令将 SSH 连接到我的 Ubuntu 机器。当我这样做时,我会收到警告说这是我正在连接的新主机,并且我得到了一个 RSA 指纹。
  2. 然后我会访问我的 Ubuntu 机器(通过 VNC)并运行 ssh-keygen -lf [public key],指纹是不同的。
  3. 挫折。

闲逛了一会儿,我发现了/etc/ssh/ssh_host_rsa_key.pub。长话短说,我检查了指纹,瞧,这就是 OS X 获取指纹的地方。在同一个文件夹中,我看到似乎是匹配的私钥(通过检查指纹验证)非常好。

所以现在我的假设是这些是预先制作的默认密钥,您可以使用它们而无需生成自己的密钥或任何其他密钥。因为我已经生成了自己的(受密码保护的)密钥,所以我想替换它们。然后我进入 SSHD_config 文件并将 RSA 密钥的目录更改为我的主目录(~/.ssh/[authorized_keys 文件中的公钥])。然后我删除了 ssh_host_rsa_key.pub。那没有用。我重建了主机密钥,撤消了配置更改,将生成的公钥留在了主目录中,并将生成的私钥移到了客户端。连接效果很好,指纹 OS X(我的客户端)提示我匹配 ssh_host_rsa_key.pub。

此外,我知道安全性正在发挥作用,因为如果我从我的 home/.ssh/ 中删除了 authorized_keys 文件,我的客户端将无法再连接。

我的问题:

  1. 如果我的客户 OS X 告诉我指纹是 ssh_host_rsa_key.pub 的指纹,为什么我可以在没有匹配私钥的情况下进行连接?

  2. 换句话说,当我还需要生成的私钥和公钥正确就位时, ssh_host 密钥扮演什么角色(客户端上没有匹配的私钥)?

  3. 说ssh需要两个公钥和一个私钥才能正常连接准确吗?或者我应该用我生成的公钥(也在授权用户中)的内容覆盖 /etc/ssh/ssh_host_rsa_key.pub 的内容?[编辑:我尝试用我生成的私钥和公钥替换 ssh_host_rsa_key.pub 和 ssh_host_rsa_key(当然是重命名的)。当我尝试重新启动 SSH 服务时,我得到“结束必须是 KEY=VALUE 对”)。所以我破坏了 SSH 服务。]

在此先感谢您的帮助。我已经在 Google 上搜索了好几个小时,甚至还给我更精通技术的朋友打了电话,他恰好在 Google 工作。而我还没有得到答案。

1个回答

主机密钥向您验证服务器,您的密钥向服务器验证您。

SSH 主机密钥提供了一个指纹,您可以使用该指纹来验证您是否连接到您认为的服务器。您手动验证您在第一次连接期间提供的公钥指纹,然后保存它。对于之后的每个连接,服务器都会向您发送一些东西,证明它拥有与该公钥匹配的私钥,因此您知道这是您第一次手动验证的服务器(...因为只有该服务器拥有该私钥)。

与您用来向服务器验证自己的密钥对完全不同它们都是密钥对,是的,但在连接过程的不同点由不同的实体持有,用于不同的目的。

总之,SSH 连接需要两个密钥对——

  • 您的客户端软件根据服务器发送的使用主机私钥加密的数据检查服务器的(主机)公钥。这要求您拥有其公钥的副本,如果您同意,您将在第一次连接时获得它,并且您的客户端存储它。
  • 服务器使用您的用户公钥副本检查使用您的用户私钥加密的身份验证数据,因为您将它放在那里(或有人为您放在那里)。