Настройка ключей SSH на сервере Windows 10 OpenSSH

Я настраивал OpenSSH для разных версий Linux много раз. Но я не могу на всю жизнь заставить его работать правильно на окнах.

Кажется, есть две стороны вопроса. Права доступа и ключ, используемый sshd/ssh-agent,

права доступа

Каждая страница, которую я читаю, имеет разные ответы для правильных разрешений. Некоторые работают, а иногда и программа жалуется на них.

Из того, что я понимаю, все ключи должны принадлежать SYSTEM, с доступом для чтения для NT SERVICE\sshd и полный контроль для Administrators а также SYSTEM? (Насколько я понимаю SYSTEM а также Administrators представлять корень в Windows). Я прочитал в документации, что доступ для чтения необходим только если не использовать ssh-add/ssh-agent, Я также настроил те же разрешения для %USERPROFILE%/.ssh/authorized_keys файл и добавил .pub ключ Ed25519, который я использую, чтобы попытаться подключиться, хотя я также попробовал его с моим собственным сгенерированным ключом RSA.

При установленных разрешениях программа не будет жаловаться при добавлении ключей к агенту или при запуске демона. Единственный вариант, который я изменил в sshd_config это ListenAddress который был привязан к 0.0.0.0, я установил его на локальный IP машины, так как SSH будет использоваться только локально.

Ключи

Когда я бегу sshd.exe с -d вариант, я заметил, что импорт 4 ключей по умолчанию из %PROGRAMDATA%/ssh, Когда я добавил ed25519.pub ключ к authorized_keys последовало HOSTNAME@workstation@HOSTNAME, HOSTNAME имя моего компьютера Нормально я бы ожидал увидеть user@host, Я пытался создать свой собственный ключ и добавить его, но когда я запускаю sshd.exe -d кажется, что он никогда не использует ничего, кроме ключей по умолчанию.

В конце концов, я не могу подключиться к серверу OpenSSH, и вход в систему %PROGRAMDATA%/ssh/Logs только кажется, что сервер запускается. Подводя итог моим вопросам: Каковы правильные разрешения для файлов ключей и authorized_hosts? Есть ли аннотация в authorized_keys быть неправым изменить ситуацию? Должен ли я добавить все ключи по умолчанию .pubв authorized_hosts? И последнее, что делает sshd имеется в виду, когда он упоминает эти ключи во время запуска (см. журнал)? Разве мой собственный сгенерированный ключ не должен работать, пока я добавляю его в authorized_hosts?

debug1: sshd version OpenSSH_for_Windows_7.6, LibreSSL 2.6.4
debug1: private host key #0: ssh-rsa SHA256:and12LVkEqyXJ2gr0SxFEQObaSFF+Czlcnx2uFjZaJQ
debug1: private host key #1: ssh-dss SHA256:waeLdy4Sm3NT+zbwEMIhbfl8TLe6WeQ0MuZE07CzFQU
debug1: private host key #2: ecdsa-sha2-nistp256 SHA256:G8/7y/04cSE3EezTrcmpK4lRmJ5f5I/CDPcHaPzsv4o
debug1: private host key #3: ssh-ed25519 SHA256:Jvn9UjsbdzH54L/yvGYGfCzJQVIMiIWL5RETbaL2ACA
debug1: rexec_argv[0]='C:\\WINDOWS\\System32\\OpenSSH\\sshd.exe'
debug1: rexec_argv[1]='-d'
debug1: Bind to port 22 on 192.168.1.144.
Server listening on 192.168.1.144 port 22.

3 ответа

Решение

Вы, кажется, смешиваете ключи хостов сервера и открытые ключи вашей учетной записи.


Ключи хоста сервера генерируются Win32-OpenSSH в %PROGRAMDATA%/ssh на его первом запуске. Им также даны правильные разрешения, нет необходимости их изменять. Это ключи, которые вы видите загруженными как "закрытые ключи хоста" в вашем журнале. Это также означает, что у них есть правильные разрешения (иначе они не будут загружаться).


Открытые ключи вашей учетной записи перейдите на %USERPROFILE%/.ssh/authorized_keys, Этот файл должен иметь доступ на запись только к той учетной записи, к которой он принадлежит.

authorized_keys файл должен содержать часть открытого ключа вашей пары ключей учетной записи. Это никак не связано с .pub файлы из %PROGRAMDATA%/ssh,

Комментарий в authorized_keys файл не имеет значения вообще.

Ключи от authorized_keys файл не загружается при запуске сервера. Они загружаются только при попытке входа в систему.

Смотрите также мои руководства по:

Обратите внимание, что если вы настраиваете ключи для администратора, поместите открытый ключ в %USERPROFILE%/.ssh/authorized_keysне будет работать. Вы должны добавить открытый ключ в %PROGRAMDATA%/ssh/administrators_authorized_keys вместо.

Источник

И вы должны установить разрешение на запуск этого скрипта в администраторе PowerShell:

$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

Я просто боролся с этим около двух часов, но то, что было упомянуто только как примечание в статье Мартина, наконец, стало для меня решением:

Настройка аутентификации с открытым ключом SSH

Однако в конфигурации Win32-OpenSSH по умолчанию в sshd_config установлено исключение для учетных записей в группе «Администраторы». Для этого сервер использует другое местоположение для файла авторизованных ключей:%ALLUSERSPROFILE%\ssh\administrators_authorized_keys(т.е. обычноC:\ProgramData\ssh\administrators_authorized_keys).

Поскольку мой пользователь является членом группы «Администраторы», все, что мне нужно было сделать, это переместить мой~/.ssh/authorized_keysк%PROGRAMDATA/ssh/administrators_authorized_keys

Кстати: я использую Windows 11 Pro 22H2.

Другие вопросы по тегам