SSH 公钥认证-服务器接受密钥但认证不成功

SSH 公钥认证-服务器接受密钥但认证不成功

我正在帮助一位朋友,他使用公钥身份验证连接到我维护的服务器时遇到了一些问题。公钥身份验证对其他几个用户来说工作正常。当然,我朋友的公钥在服务器上的 authorized_keys 文件中。

debug1: Host 'xxxxx' is known and matches the RSA host key.
debug1: Found key in /home/xxx/.ssh/known_hosts:3
debug1: ssh_rsa_verify: signature correct
debug1: SSH2_MSG_NEWKEYS sent
debug1: expecting SSH2_MSG_NEWKEYS
debug1: SSH2_MSG_NEWKEYS received
debug1: Roaming not allowed by server
debug1: SSH2_MSG_SERVICE_REQUEST sent
debug1: SSH2_MSG_SERVICE_ACCEPT received
debug1: Authentications that can continue:
publickey,gssapi-keyex,gssapi-with-mic,password
debug1: Next authentication method: gssapi-keyex
debug1: No valid Key exchange context
debug1: Next authentication method: gssapi-with-mic
debug1: Unspecified GSS failure.  Minor code may provide more information
Credentials cache file '/tmp/krb5cc_1000' not found
debug1: Unspecified GSS failure.  Minor code may provide more information
Credentials cache file '/tmp/krb5cc_1000' not found
debug1: Unspecified GSS failure.  Minor code may provide more information
debug1: Unspecified GSS failure.  Minor code may provide more information
debug1: Next authentication method: publickey
debug1: Offering RSA public key: /home/xxx/.ssh/id_rsa
debug1: Server accepts key: pkalg ssh-rsa blen 279
debug1: Authentications that can continue:
publickey,gssapi-keyex,gssapi-with-mic,password
debug1: Offering RSA public key: [email protected]
debug1: Authentications that can continue:
publickey,gssapi-keyex,gssapi-with-mic,password
debug1: Trying private key: /home/xxx/.ssh/id_dsa
debug1: Trying private key: /home/xxx/.ssh/id_ecdsa
debug1: Next authentication method: password

下面这句话对我来说毫无意义

Server accepts key: pkalg ssh-rsa blen 279

既然服务器似乎认为公钥完全正确,那么为什么它继续进行密码认证而不是对用户进行认证呢?

答案1

我相信您正在显示客户端日志/调试输出。我会查看服务器端日志,因为这些日志通常会提供有关为什么服务器拒绝公钥认证尝试。

例如,用户主目录或 .ssh 目录的权限不安全。

答案2

就我的情况而言,问题在于尝试连接的用户是 root,而我已禁用 root ssh 登录(可能每个人都应该这样做)。因此,请确保您的朋友尝试通过正确的非 root 用户帐户进行连接。

答案3

我最近在使用 Gerrit 的 SSH 接口时遇到了这个问题。问题是我的本地 SSH 代理向 Gerrit 服务器提供了一堆不同的密钥,在经过一些限制后,服务器就拒绝接受更多密钥(但仍然回复了Server accepts key)。我不知道这种行为是 Gerrit 独有的还是 OpenSSH 的普遍现象。

解决方法是强制选择正确的键~/.ssh/config

Host gerrit.example.org
  IdentityFile ~/path/to/my_key
  IdentitiesOnly yes

确保~/path/to/my_key.pub存在后(可以使用 创建ssh-keygen -f ~/path/to/my_key -y > ~/path/to/my_key.pub),ssh 代理可以提供密钥而无需重新输入密码,但不提供任何其他密钥。

相关内容