![Windows 10 sshd - входящий ssh без пароля требует пароль](https://rvso.com/image/1585740/Windows%2010%20sshd%20-%20%D0%B2%D1%85%D0%BE%D0%B4%D1%8F%D1%89%D0%B8%D0%B9%20ssh%20%E2%80%8B%E2%80%8B%D0%B1%D0%B5%D0%B7%20%D0%BF%D0%B0%D1%80%D0%BE%D0%BB%D1%8F%20%D1%82%D1%80%D0%B5%D0%B1%D1%83%D0%B5%D1%82%20%D0%BF%D0%B0%D1%80%D0%BE%D0%BB%D1%8C.png)
Я пытаюсь настроить ssh без пароля и парольной фразы с хоста Linux Mint 19.1 на хост Windows 10. На хосте Windows 10 есть OpenSSH_for_Windows_7.7p1. Это порт OpenSSH от Microsoft.
Я могу настроить это для учетных записей администратора, но непривилегированные учетные записи у меня не работают. Учетные записи администратора делаются по-другому.
Я перепробовал множество разных способов, но вот тот, который, по моему мнению, должен сработать, и что с ним не так:
Я создаю файл /Users/Alden Stromberg/.ssh/authorized_keys с помощью mkdir и echo > (или mkdir и cygwin vi — результат тот же).
Затем я использую OpenSSHUtils дляпытатьсячтобы установить правильные разрешения:
PS C:\Users\Alden Stromberg\.ssh> Import-Module 'C:\Program Files\WindowsPowerShell\Modules\OpenSSHUtils\0.0.2.0\OpenSSHUtils.psd1'
PS C:\Users\Alden Stromberg\.ssh> Repair-AuthorizedKeyPermission .\authorized_keys
[*] .\authorized_keys
'NT AUTHORITY\SYSTEM' has the following access to '.\authorized_keys': 'Deny'-'ExecuteFile'.
Shall I make it Allow FullControl?
[Y] Yes [A] Yes to All [N] No [L] No to All [S] Suspend [?] Help (default is "Y"):
Exception calling "SetAccessRule" with "1" argument(s): "This access control list is not in canonical form and therefore cannot be
modified."
At C:\Program Files\WindowsPowerShell\Modules\OpenSSHUtils\0.0.2.0\OpenSSHUtils.psm1:399 char:17
+ $acl.SetAccessRule($ace)
+ ~~~~~~~~~~~~~~~~~~~~~~~~
+ CategoryInfo : NotSpecified: (:) [], MethodInvocationException
+ FullyQualifiedErrorId : InvalidOperationException
'NT AUTHORITY\SYSTEM' now has FullControl access to '.\authorized_keys'.
'DESKTOP-A31M9SV\None' should not have access to '.\authorized_keys'..
Shall I remove this access?
[Y] Yes [A] Yes to All [N] No [L] No to All [S] Suspend [?] Help (default is "Y"):
Exception calling "RemoveAccessRule" with "1" argument(s): "This access control list is not in canonical form and therefore cannot
be modified."
At C:\Program Files\WindowsPowerShell\Modules\OpenSSHUtils\0.0.2.0\OpenSSHUtils.psm1:490 char:20
+ if(-not ($acl.RemoveAccessRule($ace)))
+ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+ CategoryInfo : NotSpecified: (:) [], MethodInvocationException
+ FullyQualifiedErrorId : InvalidOperationException
'Everyone' should not have access to '.\authorized_keys'..
Shall I remove this access?
[Y] Yes [A] Yes to All [N] No [L] No to All [S] Suspend [?] Help (default is "Y"):
Exception calling "RemoveAccessRule" with "1" argument(s): "This access control list is not in canonical form and therefore cannot
be modified."
At C:\Program Files\WindowsPowerShell\Modules\OpenSSHUtils\0.0.2.0\OpenSSHUtils.psm1:490 char:20
+ if(-not ($acl.RemoveAccessRule($ace)))
+ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+ CategoryInfo : NotSpecified: (:) [], MethodInvocationException
+ FullyQualifiedErrorId : InvalidOperationException
'NT SERVICE\sshd' needs Read access to '.\authorized_keys'.
Shall I make the above change?
[Y] Yes [A] Yes to All [N] No [L] No to All [S] Suspend [?] Help (default is "Y"):
Exception calling "AddAccessRule" with "1" argument(s): "This access control list is not in canonical form and therefore cannot be
modified."
At C:\Program Files\WindowsPowerShell\Modules\OpenSSHUtils\0.0.2.0\OpenSSHUtils.psm1:564 char:21
+ $acl.AddAccessRule($ace)
+ ~~~~~~~~~~~~~~~~~~~~~~~~
+ CategoryInfo : NotSpecified: (:) [], MethodInvocationException
+ FullyQualifiedErrorId : InvalidOperationException
'NT SERVICE\sshd' now has Read access to '.\authorized_keys'.
Set-Acl : The process does not possess the 'SeSecurityPrivilege' privilege which is required for this operation.
At C:\Program Files\WindowsPowerShell\Modules\OpenSSHUtils\0.0.2.0\OpenSSHUtils.psm1:582 char:9
+ Set-Acl -Path $FilePath -AclObject $acl -Confirm:$false
+ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+ CategoryInfo : PermissionDenied: (C:\Users\Alden ...authorized_keys:String) [Set-Acl], PrivilegeNotHeldException
+ FullyQualifiedErrorId : System.Security.AccessControl.PrivilegeNotHeldException,Microsoft.PowerShell.Commands.SetAclCommand
Repaired permissions
Надеясь исправить неканонический ACL, я попробовал:
icacls.exe .\authorized_keys /reset /T /C /L /Q
...но последующий повторный запуск Repair-AuthorizedKeyPermission не приносит никакой радости.
Что я делаю не так? 0.0.2.0\OpenSSHUtils.psm1 устарел?
Для полноты картины вот что сработало для учетных записей администратора:
get-acl c:\ProgramData\ssh\ssh_host_dsa_key | set-acl c:\ProgramData\ssh\administrators_authorized_keys
Спасибо!
решение1
Для меня эту проблему решили comment out
две строки в конце файла C:\ProgramData\ssh\sshd_config
:
Match Group administrators
AuthorizedKeysFile __PROGRAMDATA__/ssh/administrators_authorized_keys
Затем перезапустите sshd. После этого (и добавления ключа pub в ~/.ssh/authorized_keys и проверки того, что файл имеет правильные права) мне больше не предлагалось вводить пароль.
решение2
Один из способов реализации беспарольной аутентификации для учетных записей, не являющихся администраторами, описан здесь: https://www.techpaste.com/2015/06/windows-ssh-server-setup-and-configuration/
Короче говоря, поместите их в свой sshd_config
, раскомментировав при необходимости существующие записи, которые находятся в разделеc:\ProgramData\ssh\
PermitRootLogin yes
StrictModes no
RSAAuthentication yes
PubkeyAuthentication yes
AuthorizedKeysFile .ssh/authorized_keys
IgnoreUserKnownHosts yes
Тогда net stop sshd
и net start sshd
.
Это, вероятно, означает, что ваш authorized_keys доступен для чтения всем на компьютере, но, по крайней мере, он работает.