Windows

公鑰身份驗證不適用於 Windows 10 專業版

  • November 17, 2020

我一直在嘗試為我的 Windows 10 專業版媒體伺服器配置 OpenSSH。我可以正常使用密碼登錄,但我正在嘗試設置公鑰身份驗證。

我已經編輯了我的sshd_config文件以允許公鑰身份驗證。客戶端和伺服器正在執行ssh-agentC:\ProgramData\ssh\administrators_authorized_keys由於該帳戶是管理員帳戶,因此我已將我的 SSH 公鑰從客戶端電腦複製並粘貼到該文件中。對上述文件的權限設置與目錄中的其他關鍵文件相同,只是 SYSTEM 和 Administrators 都具有完全控制權,沒有列出其他人。

我添加了調試日誌,當我嘗試使用公鑰連接時,我得到了這個:

debug1: userauth-request for user uther service ssh-connection method none [preauth]
debug1: attempt 0 failures 0 [preauth]
debug1: user uther matched group list administrators at line 84
debug1: userauth-request for user uther service ssh-connection method publickey [preauth]
debug1: attempt 1 failures 0 [preauth]
debug1: userauth_pubkey: test pkalg ssh-rsa pkblob RSA SHA256:jcQNaVuxvH90SIh4zu8xduBqJaav1WFQJIov3hiFSFM [preauth]
debug1: trying public key file C:\\ProgramData\\ssh\\administrators_authorized_keys
Failed publickey for uther from 10.0.0.24 port 60432 ssh2: RSA SHA256:jcQNaVuxvH90SIh4zu8xduBqJaav1WFQJIov3hiFSFM
debug1: userauth-request for user uther service ssh-connection method keyboard-interactive [preauth]

我不知道如何解決這個問題。我使用遠端桌面將客戶端上 id_rsa.pub 中的文本剪切並粘貼到管理員授權密鑰文件中的伺服器。似乎沒有權限錯誤,我無法弄清楚為什麼它不會進行身份驗證。

我將不勝感激任何人可以提供的幫助以使這項工作正常進行。這並不重要,SSH 不會暴露在 Internet 上,但我使用的一些腳本在使用公鑰身份驗證時會做得更好。

我還應該注意,當我使用我的 Microsoft 帳戶設置伺服器時,我一直想知道這是否與它有關,所以我可能會嘗試設置一個直接的本地帳戶,看看是否可以解決它。

編輯:我試圖創建一個本地使用者帳戶,但我不能。即使我嘗試使用control userpasswords2該框,但創建帳戶的所有選項都被禁用。我想這一定是因為我有 Windows 10 專業版而不是更高和最昂貴的版本。

我終於通過註釋掉以下行來解決問題:

Match Group administrators
      AuthorizedKeysFile __PROGRAMDATA__/ssh/administrators_authorized_keys

然後我將授權密鑰放入普通文件中~\.ssh\authorized_keys,就像我使用 ssh 的任何其他時間一樣。當我進行初步研究並打折時,我發現這對很多人不起作用。

在 PowerShell 中使用此命令序列來更正administrators_authorized_keys

$acl = Get-Acl C:\ProgramData\ssh\administrators_authorized_keys
$acl.SetAccessRuleProtection($true, $false)
$administratorsRule = New-Object system.security.accesscontrol.filesystemaccessrule("Administrators","FullControl","Allow")
$systemRule = New-Object system.security.accesscontrol.filesystemaccessrule("SYSTEM","FullControl","Allow")
$acl.SetAccessRule($administratorsRule)
$acl.SetAccessRule($systemRule)
$acl | Set-Acl

引用自:https://serverfault.com/questions/1032713