Настройка OpenSSH для Windows с использованием проверки подлинности с открытым ключом
У меня возникают проблемы с настройкой OpenSSH для Windows с использованием проверки открытого ключа.
Я работаю над своим локальным рабочим столом и могу ssh с помощью ключа от Unix-машин или других машин OpenSSH для Windows.
Я реплицировал сборку на сервер, я могу проверить подлинность паролей, но когда я использую ключи, я получаю следующую проблему:
debug1: Authentications that can continue: publickey,password,keyboard-interactive
debug3: start over, passed a different list publickey,password,keyboard-interactive
debug3: preferred publickey,keyboard-interactive,password
debug3: authmethod_lookup publickey
debug3: remaining preferred: keyboard-interactive,password
debug3: authmethod_is_enabled publickey
debug1: Next authentication method: publickey
debug1: Offering RSA public key: /cygdrive/c/sshusers/jsadmint2232/.ssh/id_rsa
debug3: send_pubkey_test
debug2: we sent a publickey packet, wait for reply
Connection closed by 127.0.0.1
Итак, для целей тестирования я просто пытался SSH на localhost, но даже при удаленном удалении я получаю ту же проблему.
Еще более странно, что когда у меня есть как пароль, так и открытый ключ включен в sshd_config
, он будет пытаться использовать только ключи, а затем бомбить с помощью вышеуказанного сообщения и даже не будет пытаться использовать пароль.
Вот шаги, которые я предпринял:
- Установить OpenSSH для Windows
- mkgroup -l → ..\etc\group (добавлены локальные группы)
- mkgroup -d → ..\etc\group (добавленные группы доменов)
- mkpasswd -L -u openssh → ..\passwd (добавлен мой локальный пользователь)
- mkpasswd -D -u jsadmint2232 → ..\passwd (добавлен мой пользователь домена)
- Отредактировал homedir в passwd, чтобы указать на c:\sshusers\%USER% - где% USER% - это имя пользователя
- Включен пароль auth, отключен ключ auth
- Созданы ssh-ключи для jsadmint2232/openssh и гарантированы, что файлы были созданы в homedirs
- Добавлены файлы authorized_keys в .ssh для каждого пользователя и добавлены ключи для входящих пользователей подключения.
- net stop opensshd/net start opensshd
- Test Password auth работает как локально, так и удаленно
- Обновлен sshd_config, чтобы активировать ключ auth - restart opensshd
- Проверить соединение и получить выше ошибки, а также даже не пытаться аутентифицировать пароль?
- Обновлен sshd_config, чтобы полностью отключить аутентификацию пароля - перезапустите opensshd
- Проверьте соединение и все еще получите ошибку выше.
Похоже, что сервер по какой-то причине убивает соединение?
Ответы
Ответ 1
Я решил проблему...
Это связано с учетной записью, которая запустила службу, - она использовала учетную запись Local System - это остановило ее доступ к файлу pub и файла authorized_keys.
Как только я остановил службу и начал как пользователь, с которым я пытался подключиться, он сработает!
Итак, в основном, вам нужно начать с учетной записи службы, а затем подключиться к внешним пользователям в качестве этого пользователя.
Ответ 2
Ниже приведены шаги по настройке OpenSSH, поставляемой с Windows 10 v.1803 (обновление за апрель 2018 года. См. комментарии к этому сообщению, возможно, он не работает с 1809).
Настройка сервера (повышенная мощность PowerShell):
Установите сервер OpenSSH: Add-WindowsCapability -Online -Name OpenSSH.Server~~~~0.0.1.0
.
Запустите агент и службы sshd: Start-Service ssh-agent; Start-Service sshd
(это автоматически сгенерирует ключи хоста и конфигурацию по умолчанию в $env:ProgramData\ssh
).
[Необязательно] Установите модуль PowerShell OpenSSHUtils: Install-Module -Force OpenSSHUtils
Настройка клиента (без повышенных возможностей PowerShell):
Сгенерируйте пользовательский ключ: cd $env:USERPROFILE\.ssh; ssh-keygen.exe
, следуйте инструкциям, согласитесь с предложенным по умолчанию расположением файла. Это создаст 2 файла: id_rsa
и id_rsa.pub
;
[Необязательно] добавьте ключ к агенту аутентификации, чтобы вам не приходилось вводить пароль каждый раз, когда вы его используете: ssh-add .\id_rsa
(или любой другой файл, который был сгенерирован);
Настройка сервера продолжена (без повышенных возможностей PowerShell):
- Войдите в систему как пользователь, для которого будет использоваться аутентификация открытого ключа
cd $env:USERPROFILE; mkdir .ssh; cd .ssh; New-Item authorized_keys
;
- Вставьте содержимое файла
id_rsa.pub
с клиента в файл .ssh\authorized_keys
из предыдущего шага.
- Настройте права доступа правильно (важно !!!):
- Запустите
start .
, чтобы открыть проводник с текущей папкой ($env:USERPROFILE\.ssh
);
- Щелкните правой кнопкой мыши
authorized_keys
, перейдите к Properties -> Security -> Advanced
- Нажмите "Отключить наследование";
- При появлении запроса выберите "Преобразовать унаследованные разрешения в явные разрешения для этого объекта";
- (действительно, очень важно) Удалите все права доступа к файлу, кроме
SYSTEM
и себя. В файле должно быть ровно две записи разрешений. В некоторых руководствах предлагается запустить Repair-AuthorizedKeyPermission $env:USERPROFILE\.ssh\authorized_keys
- при этом будет попытаться добавить пользователя sshd
в список разрешений, и это нарушит аутентификацию, поэтому не делайте этого или, по крайней мере, не соглашайтесь на добавление sshd
пользователь). И SYSTEM
, и вы должны иметь полный контроль над файлом.
- Если ваша сборка Windows 1809 или более поздняя, необходимо закомментировать следующие строки в файле
C:\ProgramData\ssh\sshd_config
. Затем перезапустите службу sshd
.
# Match Group administrators
# AuthorizedKeysFile __PROGRAMDATA__/ssh/administrators_authorized_keys
Клиент:
- Запустите
ssh <serverusername>@<serverhostname>
. Это должно работать на этом этапе.
Попробовал это с Windows 10 в качестве сервера и как с собой, так и с Debian Linux в качестве клиента.
Ответ 3
Если вы используете mls-software.com версию OpenSSH, вот еще одно примечание.
Если вы используете учетную запись SSHD_SERVER и разделение привилегий, вы сможете использовать аутентификацию открытого ключа (за http://www.mls-software.com/opensshd-pki.html). Однако, если UAC включен, вам не удастся выполнить установку. Пользователь не будет создан правильно, и служба не будет создана. Вручную пытаться получить эти предметы после факта очень сложно. Простое отключение UAC перед установкой позволит процессу установки правильно создать пользователя (пользователей) и службу. После установки вы можете снова включить UAC.
Когда я создал учетную запись SSHD_SERVER, аутентификация вручную удалась при использовании проверки подлинности с помощью пароля, но клиентский терминал подключился к "/bin/ bash: Operation not allowed". Аутентификация с открытыми ключами была закрыта сервером (оригинальная ошибка, отправленная Cambolie).
Ответ 4
Я решил это:
- Установка в режиме разделения привилегий SSHD_SERVER+. Я также установил разделение привилегий на "да" в конфигурации вручную. Это не сработало для меня много времени, пользователь не создавался. Тогда это сработало, я не знаю, почему. Я только пошел на учетные записи пользователей на панели управления, чтобы проверить, что UAC выключен. У меня также был /var/empty с полным доступом для всех.
- Для C:\openssh\var\empty Я установил "атрибуты get/set" для всех и для себя и для "полных" разрешений для. \sshd_server. Я также сделал его владельцем.