尝试连接到 Windows Server 时“服务器拒绝我们的密钥”

Chr*_*ers 9 ssh authentication openssh putty ssh-keys

我正在尝试使用 PuTTY 将远程桌面从笔记本电脑安全地连接到台式计算机,到目前为止,我已经成功地在没有密钥的情况下通过正确的端口建立隧道,只需使用我的用户名和密码。这些都是 Windows 机器,运行 Windows 10。

我使用 PuTTYGen 生成了一个密钥,每次我都会将其复制并粘贴到public keyC:\Users\Chris\.ssh\authorized_keys在服务器上),如下所示:

ssh-rsa AAAAB3NzaC1yc2EAAAABJQAAAQBl8kTxv8cxW5tSvNjId+qrype1ZA+zEO3Qag+BHhlMvvtrx/faZp8XMXbSqulZVqXNFnN0ADAaAv2hMltP+rft4R8X9qaJSIlYdPo8F3BmV5G2mu+AQKnOrGooLfwc2oa4qOfHJMqzciFqVVTAOjo3BQ3ZtZnN23os1WfiRCcwlNZgrRlgpUPkA/CgaWTDnlDpxvNZp3fVia8pDvLlqVIIn+Fu7UEJi/pNDUiexrky7nR0JzIL3ZAPAu6U26WLJA7fYw7nlySzz/BuxiPyIzeRT+qiHQuwf2yOkCXNIeQQjgLsbw0eS67TWC7pa6NbLa0KqmgDChdSNsSB5aKTMh3T rsa-key-20190410
Run Code Online (Sandbox Code Playgroud)

然后,在客户端上,我选择私钥文件Settings > Connection > SSH > Auth > Private key file for Authentication > C:\Users\Chris\Desktop\SSH-KEY\key1.ppk

我进行了双重和三次检查:我粘贴到的公钥与authorized_keys加载到 PuTTY 中的私钥相对应。

当我尝试连接会话时,出现以下错误:

Using username "Chris".
Server refused our key
Chris@my.pub.lic.ip's password:
Run Code Online (Sandbox Code Playgroud)

我找不到更多文档或错误代码。

不存在日志文件,但是当我手动启用日志记录并在连接后打开它时,客户端的文件中存在此文件:

Using username "Chris".
Server refused our key
Chris@my.pub.lic.ip's password:
Run Code Online (Sandbox Code Playgroud)

除了生成和使用从服务器和客户端生成的密钥对之外,我还尝试过使用Chris和。chris

我后来在以下位置找到了服务器的附加日志文件C:\ProgramData\ssh\logs\sshd.log

1184 2019-04-10 12:38:48.995 Server listening on :: port 22.
1184 2019-04-10 12:38:48.995 Server listening on 0.0.0.0 port 22.
13568 2019-04-10 12:39:00.943 Authentication refused.
13568 2019-04-10 12:39:04.395 Connection closed by authenticating user chris my.pub.lic.ip port 54460 [preauth]
Run Code Online (Sandbox Code Playgroud)

我已经看到了一些关于使用chmod和 检查 的建议/var/log/secure,这两个建议对我来说都是无用的,因为它们是 Linux 命令和目录,而这两台机器都是 Windows。

我承认:我对此有点失去理智。我正在做任何地方的每个教程所建议的一切,但没有任何效果。

Chr*_*ris 6

我想我面临着同样的问题...从那以后运气好吗?您找到原因/解决方案了吗?

编辑:

好的,我在我这边找到了问题的原因...克里斯,如果您使用管理员帐户进行 SSH,这对您来说也可能是一样的:

实际上,这篇文章中的评论指出了这个问题: https ://stackoverflow.com/questions/20864224/putty-getting-server-refused-our-key-error

“主要事实是,作为管理员,存在一个错误,该错误仅在administrators_authorized_keys 文件中查找,而不是在预期的Users .ssh 文件夹中查找authorized_keys(每个人在Windows 上运行sshd 的悲痛点)”

解决方案:

在 %programdata%\ssh 中 sshd_config 文件的末尾/底部,您需要注释掉(或删除)最后两行:

Match Group Administrators
    AuthorizedKeysFile __PROGRAMDATA__/ssh/administrators_authorized_keys
Run Code Online (Sandbox Code Playgroud)

需要重新启动 SSH 服务器才能将其考虑在内。

另一种(也许更安全)的方法是在 %programdata%\ssh 下创建这样的“administrators_authorized_keys”文件,并在其中添加客户端的公钥,其中确实是管理员用户。


小智 6

我遇到过同样的问题。简而言之,这是我这边两次单独的“错误配置”造成的。

  1. 如果是管理员用户,则需要使用“administrators_authorized_keys”。
  2. authorized_keys 文件需要具有特定的权限才能使用。

确保创建文件:

%PROGRAMDATA%\ssh\administrators_authorized_keys
Run Code Online (Sandbox Code Playgroud)

将您的 SSH 公钥插入其中,然后通过在 powershell 中运行以下命令来确保它具有正确的权限:

icacls.exe "C:\ProgramData\ssh\administrators_authorized_keys" /inheritance:r /grant "Administrators:F" /grant "SYSTEM:F"
Run Code Online (Sandbox Code Playgroud)

这似乎已经解决了我的问题。假设您的用户不是管理员用户,请仅尝试authorized_keys 文件中的权限部分。也许它会解决它。

该解决方案基于“管理用户”部分下的https://docs.microsoft.com/en-us/windows-server/administration/openssh/openssh_keymanagement