使用公钥认证设置Windows的OpenSSH

124

我在为Windows设置OpenSSH时遇到了问题,使用公钥验证。

我已经在我的本地桌面上实现了这个功能,并且可以通过Unix机器或其他OpenSSH for Windows机器使用密钥进行ssh连接。

我已经将构建复制到服务器上,我可以成功使用密码验证,但是当我使用密钥时,出现以下问题:

debug1: Authentications that can continue: publickey,password,keyboard-interactive
debug3: start over, passed a different list publickey,password,keyboard-interactive
debug3: preferred publickey,keyboard-interactive,password
debug3: authmethod_lookup publickey
debug3: remaining preferred: keyboard-interactive,password
debug3: authmethod_is_enabled publickey
debug1: Next authentication method: publickey
debug1: Offering RSA public key: /cygdrive/c/sshusers/jsadmint2232/.ssh/id_rsa
debug3: send_pubkey_test
debug2: we sent a publickey packet, wait for reply
Connection closed by 127.0.0.1

为了测试,我一直在尝试连接本地主机的SSH,但即使远程尝试,我也遇到了同样的问题。

更奇怪的是,在sshd_config中启用密码和公钥时,它只会尝试使用密钥,然后以上述消息崩溃,并且甚至不会尝试使用密码。

我已经执行了以下步骤:

  1. 安装Windows的OpenSSH
  2. mkgroup -l >>..\etc\group(添加本地群组)
  3. mkgroup -d >>..\etc\group(添加域群组)
  4. mkpasswd -L -u openssh >>..\passwd(添加我的本地用户)
  5. mkpasswd -D -u jsadmint2232 >>..\passwd(添加我的域用户)
  6. 编辑文件passwd中的homedir,将其指向c:\sshusers%USER%,其中%USER%是用户名
  7. 启用密码身份验证,禁用密钥身份验证
  8. 为jsadmint2232/OpenSSH创建SSH密钥,并确保文件已创建在主目录中
  9. 在每个用户的.ssh目录中添加authorized_keys文件,并为传入连接的用户添加密钥
  10. net stop opensshd/ net start opensshd
  11. 测试本地和远程是否都可以使用密码身份验证
  12. 更新sshd_config以启用密钥身份验证-重新启动opensshd
  13. 测试连接并获得上述错误。此外,它甚至不会尝试使用密码身份验证。
  14. 更新sshd_config以完全禁用密码身份验证-重新启动opensshd
  15. 测试连接,仍然获得以上错误

看起来服务器因某种原因终止了连接。

13个回答

0

这是一个非常英语中心化的默认 Microsoft 使用方式。

目前,组匹配行检查管理员组的 ENGLISH 语言版本字符串,称为“administrators”,这在许多其他语言的 Windows 安装中都会失败。在德语安装中,该行需要改为“administratoren”。他们最好能够通过 SID 匹配组。(在拒绝组匹配功能中,这更加重要 - 尚未测试过 - 但如果它们检查字符串而不是 SID,则拒绝将毫无意义,并且可以通过使用不同的 Windows 语言安装轻松规避)

(另请参见 https://github.com/MicrosoftDocs/windowsserverdocs/issues/1911#issuecomment-771552030


0

我已经在多台Windows Pro 1809和2004计算机上彻底测试了n0rd's solution,我同意他的大部分步骤。

服务器设置(提升的PowerShell):全部同意。

客户端设置(非提升的PowerShell):全部同意。

服务器设置继续(非提升的PowerShell):步骤1、2、3:同意

服务器设置继续(非提升的PowerShell):步骤4:不要执行步骤4中的任何操作。

服务器设置继续(非提升的PowerShell):步骤5:同意

服务器设置继续(非提升的PowerShell):步骤6:(添加)取消注释(删除#)C:\ProgramData\ssh\sshd_config中的#PasswordAuthentication yes

服务器设置继续(非提升的PowerShell):步骤7:(添加)在服务中重新启动OpenSSH SSH服务器。

我没有发现任何与安全、权限或Unicode有关的文件问题。它们都是开箱即用的正确的。


我使用Win 10.0.18363,但无法使基于密钥的身份验证工作。我可以使用密码连接,但在切换到基于密钥的连接时,即使从本地主机,我也会得到“由::1端口22重置的连接”。 - ShiraishiMai

0
没有人指出文件~/.ssh/authorization_keys必须使用DOS/Windows行结尾。它不能使用Unix行结尾。如果你已经尝试了一切但仍然不起作用,可以尝试这个方法(我正在使用cygwin):
gawk -v ORS='\r\n' '1' authorized_keys > authorized_keys2

检查文件是否具有DOS行结尾:

hexdump -C authorization_keys2

替换原文件:

mv authorized_keys2 authorized_keys

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接