公鑰身份驗證不適用於 Windows 10 專業版
我一直在嘗試為我的 Windows 10 專業版媒體伺服器配置 OpenSSH。我可以正常使用密碼登錄,但我正在嘗試設置公鑰身份驗證。
我已經編輯了我的
sshd_config
文件以允許公鑰身份驗證。客戶端和伺服器正在執行ssh-agent
。C:\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