sshd 拒绝公钥,即使在 authorized_keys 中匹配

sshd 拒绝公钥,即使在 authorized_keys 中匹配

我使用的是适用于 Windows 的 openSSH(32 位),并已设置 sshd 进行公钥身份验证。我非常肯定所有文件权限都已正确设置,并且我已将正确的公钥添加到 authorized_keys 文件中。但是,当客户端尝试验证其公钥时,它会失败。调试输出如下:(公钥替换为 xxxxxxx)

debug1: userauth-request for user X service ssh-connection method publickey debug1: attempt 2 failures 0 debug2: input_userauth_request: try method publickey debug3: userauth_pubkey: have signature for RSA SHA256:xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx debug1: trying public key file C:\\Users\\X\\authorized_keys debug1: matching key found: file C:\\Users\\X\\authorized_keys, line 2 RSA SHA256:xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx debug3: socket:0, socktype:1, io:00986788, fd:3 debug3: unable to connect to pipe \\\\.\\pipe\\openssh-ssh-agent, error: 2 debug3: close - io:00986788, type:2, fd:3, table_index:3 debug1: get_priv_agent_sock: unable to connect to privileged agent, errno:2 debug2: userauth_pubkey: authenticated 0 pkalg rsa-sha2-512 Failed publickey for X from ::1 port 63175 ssh2: RSA SHA256:xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx debug3: userauth_finish: failure partial=0 next methods="publickey,password,keyboard-interactive"

我想知道这unable to connect to pipe \\\\.\\pipe\\openssh-ssh-agent, error: 2是否是造成这种情况的原因。如果是的话,有没有办法禁用此功能,而只使用 authorized_keys?

编辑:事实证明,unable to connect to pipe \\\\.\\pipe\\openssh-ssh-agent, error: 2使用 Jakuje 的建议后错误已经消失,但是公钥认证仍然失败:

Failed publickey for X from ::1 port 63175 ssh2: RSA SHA256:xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx debug3: userauth_finish: failure partial=0 next methods="publickey,password,keyboard-interactive"

编辑2:值得一提的是,我没有运行典型设置。openSSH 可执行文件、配置文件和密钥文件并不位于用户的主目录中,而是位于用户的 ProgramData 目录中。

答案1

debug3: unable to connect to pipe \\\\.\\pipe\\openssh-ssh-agent, error: 2
debug3: close - io:00986788, type:2, fd:3, table_index:3
debug1: get_priv_agent_sock: unable to connect to privileged agent, errno:2

密钥已找到,但服务器需要联系身份验证代理来创建您的会话。它要么没有启动,要么失败了。您可以尝试找到它,重新启动 sshd 服务器等等。此拉取请求讨论了所有 Windows 修改的内容和作用:

https://github.com/openssh/openssh-portable/pull/63

答案2

所以我把authorized_keys文件移动到了用户的主目录/.ssh,设置权限如下:

  • SSHD 用户:读取和执行、读取、写入
  • 系统:完全访问
  • 管理员:完全访问权限

并将 sshd_config 文件中的路径更改为指向新位置,一切开始正常工作。希望这能帮助其他可能遇到同样问题的人。

答案3

当我通过简单地覆盖文件将 OpenSSH 从 0.6.0 更新到 0.20.0 时,就出现了这个问题。事实上,正如 @Jakuje 指出的那样,架构上发生了一些变化,现在 sshd 需要一个单独的代理 ssh-agent,这在以前的版本中并不存在。

您需要通过执行以下操作重新安装 OpenSSH:

PS C:\OpenSSH-Win64> net stop sshd

The sshd service was stopped successfully.

PS C:\OpenSSH-Win64> .\uninstall-sshd.ps1
sshd successfully uninstalled
ssh-agent service is not installed
PS C:\OpenSSH-Win64> .\install-sshd.ps1
[SC] SetServiceObjectSecurity SUCCESS
[SC] ChangeServiceConfig SUCCESS
[SC] ChangeServiceConfig2 SUCCESS
sshd and ssh-agent services successfully installed
PS C:\OpenSSH-Win64> net start sshd

The sshd service was started successfully.

可能还需要使用 Fix{Host|User}FilePermissions.ps1 修复权限。

答案4

对我来说,这是连接用户的 .ssh/authorized_keys 文件的权限问题。当我将日志记录更改为以下内容时,看到了此信息:

SyslogFacility LOCAL0
LogLevel DEBUG3

要更正 .ssh/authorized_keys 文件的权限,请右键单击属性 -> 高级按钮(右下角)-> 将所有者(顶部)更改为用户帐户。重新启动 OpenSSH 服务(两者)。

相关内容