Настройка 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):

  1. Установите сервер OpenSSH: Add-WindowsCapability -Online -Name OpenSSH.Server~~~~0.0.1.0.

  2. Запустите агент и службы sshd: Start-Service ssh-agent; Start-Service sshd (это автоматически сгенерирует ключи хоста и конфигурацию по умолчанию в $env:ProgramData\ssh).

  3. [Необязательно] Установите модуль PowerShell OpenSSHUtils: Install-Module -Force OpenSSHUtils

Настройка клиента (без повышенных возможностей PowerShell):

  1. Сгенерируйте пользовательский ключ: cd $env:USERPROFILE\.ssh; ssh-keygen.exe, следуйте инструкциям, согласитесь с предложенным по умолчанию расположением файла. Это создаст 2 файла: id_rsa и id_rsa.pub;

  2. [Необязательно] добавьте ключ к агенту аутентификации, чтобы вам не приходилось вводить пароль каждый раз, когда вы его используете: ssh-add .\id_rsa (или любой другой файл, который был сгенерирован);

Настройка сервера продолжена (без повышенных возможностей PowerShell):

  1. Войдите в систему как пользователь, для которого будет использоваться аутентификация открытого ключа
  2. cd $env:USERPROFILE; mkdir .ssh; cd .ssh; New-Item authorized_keys;
  3. Вставьте содержимое файла id_rsa.pub с клиента в файл .ssh\authorized_keys из предыдущего шага.
  4. Настройте права доступа правильно (важно !!!):
    1. Запустите start ., чтобы открыть проводник с текущей папкой ($env:USERPROFILE\.ssh);
    2. Щелкните правой кнопкой мыши authorized_keys, перейдите к Properties -> Security -> Advanced
    3. Нажмите "Отключить наследование";
    4. При появлении запроса выберите "Преобразовать унаследованные разрешения в явные разрешения для этого объекта";
    5. (действительно, очень важно) Удалите все права доступа к файлу, кроме SYSTEM и себя. В файле должно быть ровно две записи разрешений. В некоторых руководствах предлагается запустить Repair-AuthorizedKeyPermission $env:USERPROFILE\.ssh\authorized_keys - при этом будет попытаться добавить пользователя sshd в список разрешений, и это нарушит аутентификацию, поэтому не делайте этого или, по крайней мере, не соглашайтесь на добавление sshd пользователь). И SYSTEM, и вы должны иметь полный контроль над файлом.
  5. Если ваша сборка Windows 1809 или более поздняя, необходимо закомментировать следующие строки в файле C:\ProgramData\ssh\sshd_config. Затем перезапустите службу sshd.
    # Match Group administrators                                                    
    #       AuthorizedKeysFile __PROGRAMDATA__/ssh/administrators_authorized_keys  
    

Клиент:

  1. Запустите 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. Я также сделал его владельцем.