我有通过 SSH 访问的服务器。我只允许使用私钥进行身份验证。通常,当我通过 PuTTY 登录时,首先会要求我输入用户名,然后要求输入密钥的密码。出于好奇,我创建了新的私钥,这对我的用户应该是无效的,并且我还设置了密码。令我惊讶的是,一旦我提供了用户名,在我被要求输入密码之前,尝试登录我的服务器的密钥就被拒绝了。
我想知道如果尚未提供密码短语,SSH 服务器如何知道私钥不正确?
我有通过 SSH 访问的服务器。我只允许使用私钥进行身份验证。通常,当我通过 PuTTY 登录时,首先会要求我输入用户名,然后要求输入密钥的密码。出于好奇,我创建了新的私钥,这对我的用户应该是无效的,并且我还设置了密码。令我惊讶的是,一旦我提供了用户名,在我被要求输入密码之前,尝试登录我的服务器的密钥就被拒绝了。
我想知道如果尚未提供密码短语,SSH 服务器如何知道私钥不正确?
虽然您已经加密了私钥,但公钥仍然是可读的。使用“ 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