尽管我的 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