如果尚未提供密码,SSH 服务器如何知道私钥不正确?

信息安全 SSH
2021-09-01 15:34:12

我有通过 SSH 访问的服务器。我只允许使用私钥进行身份验证。通常,当我通过 PuTTY 登录时,首先会要求我输入用户名,然后要求输入密钥的密码。出于好奇,我创建了新的私钥,这对我的用户应该是无效的,并且我还设置了密码。令我惊讶的是,一旦我提供了用户名,在我被要求输入密码之前,尝试登录我的服务器的密钥就被拒绝了。

我想知道如果尚未提供密码短语,SSH 服务器如何知道私钥不正确?

2个回答

虽然您已经加密了私钥,但公钥仍然是可读的。使用“ publickey ”方法的SSH 身份验证通过让客户端将每个潜在的公钥发送到服务器来工作,然后服务器响应告诉客户端允许使用哪个密钥。如果允许其中一个密钥,客户端必须解密私钥以签署消息,证明私钥的所有权。

在您的实验中,服务器响应说您的用户名不允许提供任何密钥,因此无需解密私钥,身份验证已经失败。

在连接期间,客户端将依次向服务器发送所有可用密钥的指纹。

当服务器向客户端发出找到有效密钥的信号时,客户端将使用它们,然后在需要时询问密码。

尝试使用调试选项运行 ssh:

ssh -o LogLevel=DEBUG3 user@dest

寻找指纹

ssh-keygen -l -f .ssh/id_rsa

要逐行检查authorized_keys:

while read line;do
    ssh-keygen -l -f <(echo "$line")
  done <.ssh/authorized_keys