Как можно подключиться к Windows через SSH используя учетную запись доменного пользователя, если нет доступа к домену?

У меня есть ноутбук с операционной системой Windows, который подключен к домену через VPN. Иногда требуется использовать другие VPN. Я настроил подключение через SSH, но столкнулся с проблемой: когда связь с доменом отсутствует, SSH подключения не проходят.

В выводе команды `ssh -v` я вижу следующее:
```
debug1: kex_ext_info_check_ver: [email protected]=<0>
debug1: kex_ext_info_check_ver: [email protected]=<0>
debug1: SSH2_MSG_SERVICE_ACCEPT received
Connection reset by 192.168.1.2 port 22
```

Если я остановлю службу с помощью команды `Stop-Service sshd` (сервис sshd работает под пользователем SYSTEM) и запущу `sshd -d` (при этом sshd работает под моим аккаунтом), то подключение проходит успешно даже без связи с доменом.

Я также проверял права на файл `C:\ProgramData\ssh\administrators_authorized_keys`, и у него есть доступ для следующих пользователей: SYSTEM, Администраторы (в эту группу я вхожу как локальный администратор) и для меня.

Кроме того, я нашел записи в логах Windows-Безопасность, но не понимаю их содержание и не знаю, как их интерпретировать.
  • 14 января 2025 г. 20:34
Ответы на вопрос 2
Проблема, с которой вы столкнулись, связана с тем, как служба `sshd` обрабатывает учетные записи пользователей в контексте авторизации на доменной основе. Когда связь с доменом теряется, служба `sshd`, работающая под учетной записью SYSTEM, не может получить необходимые для авторизации данные, что приводит к сбоям при подключении.

Вот несколько шагов, которые могут помочь вам решить эту проблему:

### 1. Проверка конфигурации `sshd`

Убедитесь, что в конфигурационном файле OpenSSH (`sshd_config`) правильно настроены разрешения на аутентификацию. Проверьте параметры, такие как:

- `AuthorizedKeysFile`, чтобы убедиться, что путь к файлу ключей указан правильно.
- Убедитесь, что параметры аутентификации (например, `PubkeyAuthentication`, `PasswordAuthentication`) включены.

### 2. Изменение пользователя службы `sshd`

Вы можете попробовать запустить службу `sshd` под учетной записью локального пользователя или администратора вместо SYSTEM. Это может помочь избежать проблем с доменной аутентификацией:

1. Откройте `services.msc`.
2. Найдите службу `OpenSSH SSH Server`.
3. Щелкните правой кнопкой мыши и выберите `Свойства`.
4. Перейдите на вкладку `Вход в систему`.
5. Выберите `Этот аккаунт` и введите учетные данные локального администратора. 
6. Перезапустите службу.

### 3. Локальные учетные записи

Используйте локальную учетную запись для подключения через SSH, когда VPN-домен недоступен. Убедитесь, что на локальном компьютере включен доступ SSH для локальных пользователей и добавлены необходимые ключи в файл `C:\ProgramData\ssh\authorized_keys`.

### 4. Проверка прав доступа

Убедитесь, что файл `C:\ProgramData\ssh\administrators_authorized_keys` доступен и настроен на чтение для всех учетных записей, которые могут пытаться подключиться. Параметры прав доступа могут быть установлены так:

- SYSTEM: полный доступ
- Администраторы: чтение
- Ваша учетная запись: чтение

### 5. Логи

Проверьте логи Windows и логи `sshd` в `C:\ProgramData\ssh\logs\` (если включено логирование). Это может помочь вам выяснить, на каком этапе происходит сбой аутентификации.

### 6. Изоляция и тестирование

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

Если все вышеперечисленные шаги не помогут решить проблему, то запустите `sshd` в режиме отладки (как вы уже делали с `sshd -d`) и наблюдайте за выводом для выявления дополнительных подсказок о том, где может возникать проблема.
Вот, похоже, ваша проблема, нерешённая 
https://github.com/PowerShell/Win32-OpenSSH/issues/1889

Судя по описанию, может проявляться если вдруг у вас в sshd ещё и GSSAPIAuthentication yes
можно попробовать отключить

Можно ещё посмотреть на
GSSAPICleanupCredentials
Specifies whether to automatically destroy the user's credentials cache on logout.
The default is yes.
По дефолту как раз yes - отключить
Похожие вопросы