Настройка ключей 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.