НейроАгент

Настройка SSH проброса портов как службы в Windows 10

Полное руководство по настройке SSH проброса портов как службы Windows 10. Решение ошибки 1053 и развертывание через SCCM с использованием NSSM.

Вопрос

Как настроить SSH проброс портов как службу или запланированное задание в Windows 10?

У меня есть закрытый ключ на локальном компьютере и соответствующий открытый ключ на терминальном сервере (asd-pc-00).

Я успешно создал проброс портов с помощью следующей команды в bat-файле:

ssh -i "C:\windows\ccmsetup\id_test2" -o StrictHostKeyChecking=no -o UserKnownHostsFile=NUL -N -f -T -R 33890:localhost:3389 test2@asd-pc-00

Однако при попытке создать службу Windows с помощью команды:

sc.exe create "SSH-Tunnel-Service" binPath= "C:\Windows\System32\OpenSSH\ssh.exe -i `"C:\windows\ccmsetup\id_test2`" -o StrictHostKeyChecking=no -o UserKnownHostsFile=NUL -N -f -T -R 33890:localhost:3389 test2@asd-pc-00"

я получаю ошибку 1053: “Служба не ответила на запрос своевременно”.

Также я пробовал использовать Планировщик задач для запуска скрипта из bat-файла или просто команды. Задание отображается как выполняющееся, но тунель не устанавливается.

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

НейроАгент

Для настройки SSH проброса портов как службы или запланированного задания в Windows 10 существуют несколько проверенных методов. Давайте разберем проблему и предложим эффективные решения.

Основная причина, по которой ваша команда sc.exe не работает, заключается в том, что службы Windows запускаются в специальном безынтерактивном контексте, где отсутствуют необходимые для SSH настройки безопасности и аутентификации. Вот как правильно настроить SSH-тунель в качестве службы.

Содержание

Проблема с запуском SSH в качестве службы Windows

Ошибка 1053 возникает из-за того, что службы Windows работают в специальном контексте, который отличается от обычного интерактивного сеанса. Основные проблемы:

  • Отсутствие интерактивного сеанса: SSH-клиент требует определенных условий для работы, которые не предоставляются средой службы
  • Проблемы с аутентификацией: Безынтерактивный контекст службы может не корректно обрабатывать приватные ключи
  • Ограничения прав: Служебный аккаунт может не иметь необходимых прав для доступа к файлу приватного ключа

Ваш подход с sc.exe технически возможен, но требует правильной настройки окружения и параметров.

Решение с использованием NSSM (Non-Sucking Service Manager)

NSSM является наиболее рекомендуемым инструментом для решения вашей задачи, как указано в нескольких источниках.

Шаг 1: Установка NSSM

  1. Скачайте NSSM с официального сайта: https://nssm.cc/download
  2. Распакуйте архив в удобное место, например C:\Program Files\nssm
  3. Добавьте путь к NSSM в системную переменную PATH или используйте полный путь к nssm.exe

Шаг 2: Создание службы с NSSM

Используйте следующую команду для создания службы:

cmd
nssm install "SSH-Tunnel-Service" "C:\Windows\System32\OpenSSH\ssh.exe"

Шаг 3: Настройка параметров службы

После установки службы откройте окно конфигурации NSSM:

cmd
nssm edit "SSH-Tunnel-Service"

Или настройте параметры через командную строку:

cmd
nssm set "SSH-Tunnel-Service" AppParameters "-i `"C:\windows\ccmsetup\id_test2`" -o StrictHostKeyChecking=no -o UserKnownHostsFile=NUL -N -f -T -R 33890:localhost:3389 test2@asd-pc-00"
nssm set "SSH-Tunnel-Service" AppDirectory "C:\Windows\System32\OpenSSH"
nssm set "SSH-Tunnel-Service" DisplayName "SSH Tunnel Service"
nssm set "SSH-Tunnel-Service" Description "SSH Port Forwarding Tunnel"

Шаг 4: Настройка учетной записи службы

Важно: Укажите учетную запись, которая имеет доступ к файлу приватного ключа:

cmd
nssm set "SSH-Tunnel-Service" ObjectName "LocalSystem"  # или ваша учетная запись
nssm set "SSH-Tunnel-Service" Password ""  # пароль, если требуется

Шаг 5: Запуск службы

cmd
nssm start "SSH-Tunnel-Service"

Проверьте статус службы:

cmd
nssm status "SSH-Tunnel-Service"

Важно: Как отмечено в источниках, NSSM является предпочтительным решением для запуска SSH туннелей в качестве служб, так как он правильно обрабатывает контекст выполнения и параметры.

Альтернативные методы настройки

Метод 1: Использование Plink из PuTTY

Если вы предпочитаете использовать PuTTY, можно настроить через Plink:

cmd
nssm install "SSH-Tunnel-Service-Plink" "C:\Path\To\putty\plink.exe"
nssm set "SSH-Tunnel-Service-Plink" AppParameters "-i `"C:\windows\ccmsetup\id_test2`" -ssh -N -R 33890:localhost:3389 test2@asd-pc-00"

Метод 2: Использование AutoSSH для надежного соединения

Для автоматического восстановления соединения используйте AutoSSH:

cmd
nssm install "SSH-Tunnel-Service-AutoSSH" "C:\Path\To\autossh\autossh.exe"
nssm set "SSH-Tunnel-Service-AutoSSH" AppParameters "-M 20000 -i `"C:\windows\ccmsetup\id_test2`" -o StrictHostKeyChecking=no -o UserKnownHostsFile=NUL -N -T -R 33890:localhost:3389 test2@asd-pc-00"

Метод 3: Использование пакетного файла с задержкой

Создайте bat-файл с задержкой запуска SSH:

bat
@echo off
timeout /t 10 /nobreak >nul
ssh -i "C:\windows\ccmsetup\id_test2" -o StrictHostKeyChecking=no -o UserKnownHostsFile=NUL -N -f -T -R 33890:localhost:3389 test2@asd-pc-00

Настройте NSSM на запуск этого bat-файла вместо прямой SSH-команды.

Настройка через Планировщик задач

Если вы предпочитаете использовать Планировщик задач, настройте его правильно:

Шаг 1: Создание задания

  1. Откройте Планировщик задач
  2. Создайте новое задание
  3. На вкладке “Общие”:
    • Имя: “SSH Tunnel Service”
    • Запускать с наивысшими правами: Включено
    • Запускать, пользователь вошел в систему: Отключено

Шаг 2: Настройка триггера

  • Действие: При запуске системы
  • Отложенный запуск: 1 минута

Шаг 3: Настройка действия

  • Действие: Запустить программу
  • Программа/скрипт: cmd.exe
  • Аргументы: /C "C:\Path\To\your\tunnel.bat"

Шаг 4: Настройка условий

  • Отключить задачу, если система работает от батарей
  • Если компьютер переведен в спящий режим, запустить задачей при пробуждении

Примечание: Как указано в исследованиях, Планировщик задач может показывать, что задание выполняется, но не устанавливать тунель из-за проблем с контекстом выполнения.

Подготовка для развертывания через SCCM

Для развертывания через SCCM подготовьте пакет следующим образом:

Структура пакета:

SSH-Tunnel-Package/
├── Install.bat
├── Uninstall.bat
├── nssm.exe
├── ssh_tunnel_config.xml
└── Readme.txt

Install.bat:

bat
@echo off
echo Installing SSH Tunnel Service...

REM Copy NSSM to system directory
copy "%~dp0nssm.exe" "%SystemRoot%\System32\"

REM Install the service
nssm install "SSH-Tunnel-Service" "C:\Windows\System32\OpenSSH\ssh.exe"
nssm set "SSH-Tunnel-Service" AppParameters "-i `"C:\windows\ccmsetup\id_test2`" -o StrictHostKeyChecking=no -o UserKnownHostsFile=NUL -N -f -T -R 33890:localhost:3389 test2@asd-pc-00"
nssm set "SSH-Tunnel-Service" AppDirectory "C:\Windows\System32\OpenSSH"
nssm set "SSH-Tunnel-Service" ObjectName "LocalSystem"

REM Start the service
nssm start "SSH-Tunnel-Service"

echo Installation completed successfully

Uninstall.bat:

bat
@echo off
echo Uninstalling SSH Tunnel Service...

REM Stop and remove the service
nssm stop "SSH-Tunnel-Service"
nssm remove "SSH-Tunnel-Service" confirm

echo Uninstallation completed successfully

Настройка SCCM:

  1. Создайте приложение с двумя типами развертывания:
    • Установка: Install.bat
    • Удаление: Uninstall.bat
  2. Настройте условия развертывания
  3. Укажите параметры для пользователя и компьютера

Тестирование и отладка

Проверка статуса службы:

cmd
sc query "SSH-Tunnel-Service"
nssm status "SSH-Tunnel-Service"

Логирование для отладки:

Добавьте логирование в вашу SSH-команду:

cmd
nssm set "SSH-Tunnel-Service" AppParameters "-i `"C:\windows\ccmsetup\id_test2`" -o StrictHostKeyChecking=no -o UserKnownHostsFile=NUL -N -f -T -R 33890:localhost:3389 test2@asd-pc-00 > `"C:\logs\ssh_tunnel.log`" 2>&1"

Проверка прав доступа:

Убедитесь, что учетная запись службы имеет доступ к файлу приватного ключа:

cmd
icacls "C:\windows\ccmsetup\id_test2"

Заключение

Для настройки SSH проброса портов как службы в Windows 10 рекомендуется использовать NSSM (Non-Sucking Service Manager), который специализируется на правильном запуске приложений в контексте служб Windows. Основные шаги:

  1. Установите NSSM и настройте им службу
  2. Корректно укажите параметры SSH-команды включая путь к приватному ключу
  3. Настройте учетную запись службы с необходимыми правами
  4. Используйте логирование для отладки проблем
  5. Подготовьте пакет для SCCM с установочными и деинсталляционными скриптами

Прямой запуск SSH через sc.exe или Планировщик задач часто не работает из-за ограничений контекста выполнения служб Windows. NSSM решает эту проблему, корректно обрабатывая параметры и окружение для запуска SSH-туннелей.

Для развертывания через SCCM подготовьте пакет с NSSM и скриптами установки/удаления, что позволит централизованно управлять SSH-туннелями на компьютерах сети.

Источники

  1. NSSM - the Non-Sucking Service Manager
  2. Persistent SSH tunnel for Windows - Technicus
  3. How can I make a SSH tunnel command into a service on Windows 10? - Stack Overflow
  4. r/sysadmin on Reddit: What is the best SSH tunneling setup for Windows?
  5. Configure SSH Tunnel (Port Forwarding) on Windows | Windows OS Hub