我使用 SecureCRT 的公钥身份验证登录 Linux 服务器,并在以下服务器上关闭密码身份验证:
1.使用SecureCRT创建密钥对(openssh密钥格式)。
2.将名为identity.pub的公钥复制到$HOME/.ssh/authorized_keys。
3.进入SSH2类别会话选项的服务器,选择公钥选项中的验证部分,然后按特性按钮,在特性对话框中,选择 使用会话公钥设置,然后找到使用身份或证书文件部分,然后按文件浏览器按钮(...),然后我选择名为identity的私钥。
4.然后我就可以使用SecureCRT并输入密钥对的密码来登录该服务器了,一切正常。
但:
在另一台服务器上,服务器上的一切都是一样的。但在 SecureCRT 中,identity
我没有选择名为的私钥,而是选择了民众密钥名为identity.pub
。尽管如此,我仍然可以通过相同的方式登录。
我不明白这是怎么可能的。
正确的是secureCRT是在服务器端用私钥来匹配公钥吗?
答案1
如果我正确理解了您的问题,那么是的 - 您必须告诉 SecureCRT 使用私钥,而不是公钥。然后,当您登录时,会发生以下情况:
您的客户端(在本例中为 SecureCRT)开始与服务器的连接,并说“嘿,我想以用户 gazelsx 身份登录”。
服务器说“当然可以,如果你能向我证明你确实是glancesx”。这里有一堆数据(一个“挑战”),我希望你加密这些数据,然后使用我可以验证的密钥将其发送回给我。
客户端使用私钥对质询进行数学签名并将其发送回服务器。
服务器说“谢谢;让我检查一下 Glancesx 的 authorized_keys 文件,看看您是否使用了 Glancesx 希望我信任的密钥”。如果它找到任何与您发回的加密数据匹配的密钥,您将被允许进入。
所以这里的重点是必须密钥由两部分组成 - 一部分在客户端(“identity”),另一部分在服务器端(“identity.pub”)。用其中一个签名的数据可以用另一个验证。
答案2
您必须将公钥分发给您想要登录的服务器(.pub 文件),并将私钥部分保留在您想要登录的客户端中(将 pub 文件也保留在那里,您将来需要它来登录另一台服务器)。
从装有 openssh 的 Linux 机器上,您可以使用ssh-copy-id -i keyfile.pub user@server
它将密钥的 pub 部分分发到服务器。