尽管密钥已被接受,SSH 连接仍要求输入密码

尽管密钥已被接受,SSH 连接仍要求输入密码

尽管我的 SSH 密钥似乎已被接受,但系统仍提示我输入密码。据我所知,下面日志中的“服务器接受密钥:pkalg ssh-rsa blen 277”行表示我的密钥已被接受。

以下是调试日志:

debug1: Next authentication method: publickey
debug1: Offering RSA public key: /home/sam/.ssh/id_rsa
debug2: we sent a publickey packet, wait for reply
debug1: Server accepts key: pkalg ssh-rsa blen 277
debug2: input_userauth_pk_ok: fp <<HASH REDACTED>>
debug1: Authentications that can continue: publickey,password,keyboard-interactive
debug1: Trying private key: /home/sam/.ssh/id_dsa
debug1: Trying private key: /home/sam/.ssh/id_ecdsa
debug2: we did not send a packet, disable method
debug1: Next authentication method: keyboard-interactive
debug2: userauth_kbdint
debug2: we sent a keyboard-interactive packet, wait for reply
debug2: input_userauth_info_req
debug2: input_userauth_info_req: num_prompts 1

非常感谢您的帮助,我发现每个遇到 SSH 问题的人都在较早的时候失败了。

答案1

你的私钥肯定不是接受,这只是尝试。基于 SSH 密钥的身份验证可能会以多种方式失败,并且日志记录并不是那么好,因此调试这个特定问题是我个人最讨厌的事情之一。我发现错误是通常由下列任一情况导致。

  • 您的~/.ssh/authorized_keys文件太开放。为了您自己的保护,sshd尝试保护您免受自己的侵害。如果您的授权密钥文件上的权限,则它将无法通过身份验证。运行chmod -R go-rwx ~/.ssh
  • 您的公钥格式~/.ssh/authorized_keys不正确。这可能是由许多问题导致的,但最常见的是复制粘贴问题。有些终端在跨屏幕复制/粘贴时,会将换行解释为新行。文件中的每个authorized_keys条目必须是一行。您可以通过更改终端仿真器的大小并查看是否有中断来检查这一点,将输出wc -l ~/.ssh/authorized_keys与输入的键数进行比较应该在那里,或者任何对你来说最合适的方式。只要确保每个键都在一行中,你就应该没问题了。

答案2

您粘贴的 ssh -v 输出表明它尝试使用密钥但没有起作用,因此它转到键盘交互。

您是否检查过所连接的服务器上的身份验证日志?(例如,/var/log/auth.log)。如果远程端的设置不正确,例如权限错误,则 ssh -v(或 -vv 或 -vvv)不会告诉您这一点,但 sshd 会记录下来。

答案3

就我而言,文件/var/log/authlog显示:

[ID 800047 auth.info] Authentication refused: bad ownership or modes for directory 

我已检查了正确的所有权/权限,.ssh$HOME权限为 777。设置 755 权限$HOME可使 sftp 正常工作。再次感谢。

答案4

~/.ssh/authorized_keys远程权限很重要(600对于我的系统 RHEL 和 Solaris)

远程主目录的权限很重要(700在我的系统中)

最后,sshd在另一个端口上以调试模式在远程机器上运行可能会有所帮助:

sudo /usr/sbin/sshd -p 5555 -dd

5555是一个示例端口,您可以更改它。有关这方面的更多信息,请参阅:http://ubuntuforums.org/archive/index.php/t-2219973.html

相关内容