1
Настройка постоянного SSH туннеля в виде службы Windows
Alexey S edited this page 2026-06-04 16:14:19 +03:00

Настройка постоянного SSH-туннеля в виде службы Windows

При администрировании удаленных серверов безопасным стандартом считается закрытие портов баз данных (например, PostgreSQL 5432 или MySQL 3306) для внешнего мира. Доступ к ним организуют через защищенный SSH-туннель (SSH Port Forwarding).

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

В этой статье мы разберем, как реализовать такую схему с помощью встроенного SSH-клиента Windows и утилиты NSSM.


Что нам понадобится

  1. Встроенный OpenSSH-клиент (доступен в Windows 10/11 по умолчанию). Для Windows Server 2016 необходимо скачать с официального источника, например, отсюда https://github.com/PowerShell/Win32-OpenSSH/releases
  2. NSSM (Non-Sucking Service Manager)бесплатная микро-утилита, которая превращает любой консольный скрипт или команду в полноценную службу Windows с функцией автоперезапуска.

Шаг 1. Настройка авторизации по SSH-ключам

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

  1. Откройте PowerShell и создайте пару ключей (если их еще нет):

powershell

ssh-keygen -t ed25519
  1. Скопируйте публичный ключ на удаленный сервер (содержимое файла ~/.ssh/id_ed25519.pub нужно добавить в файл ~/.ssh/authorized_keys на сервере).

  2. Проверьте подключение из консоли. Вы должны заходить на сервер без ввода пароля: powershell

ssh user@remote_server_ip

Шаг 2. Тестирование команды проброса порта

Перед созданием службы обязательно убедитесь, что команда туннелирования работает корректно в ручном режиме. Синтаксис команды для проброса порта (например, для PostgreSQL):

powershell

ssh -N -L 5433:127.0.0.1:5432 user@remote_server_ip -i C:\Users\Ваше_Имя\.ssh\id_ed25519

Разбор флагов:

  • -N — указание не выполнять удаленные команды (нужно только для проброса портов).
  • -L 5433:127.0.0.1:5432 — перенаправлять локальный порт 5433 на порт 5432 удаленного сервера.
  • -i — явный путь к вашему приватному SSH-ключу.

Проверьте работу: не закрывая окно консоли, попробуйте подключиться к базе данных через ваш SQL-клиент (DBeaver/pgAdmin), указав localhost и порт 5433. Если подключение успешно — закройте консоль (Ctrl+C).

Шаг 3. Установка туннеля как службы через NSSM

  1. Скачайте утилиту NSSM с официального сайта и распакуйте архив (https://nssm.cc/builds).
  2. Откройте PowerShell от имени Администратора, перейдите в папку с распакованной утилитой (выбирайте версию из папки win64) и выполните команду для создания службы:

powershell

.\nssm.exe install SSH-Tunnel-DB
  1. Откроется графический интерфейс настройки службы. Заполните вкладки следующим образом:

    Вкладка Application:

    • Path: Путь к системному SSH-клиенту. Обычно это:
    C:\Windows\System32\OpenSSH\ssh.exe
    
    • Startup directory: C:\Windows\System32\OpenSSH

    • Arguments: Аргументы, которые мы тестировали на Шаге 2:

      text-N -L 5433:127.0.0.1:5432 user@remote_server_ip -i C:\Users\Ваше_Имя\.ssh\id_ed25519
      

    Вкладка Details:

    • Display name: Отображаемое имя (например, SSH Tunnel for Database)
    • Startup type: Выберите Automatic (чтобы служба стартовала вместе с Windows).

    Вкладка Logon (Важно!):

    По умолчанию службы работают от имени Local System. У этой учетной записи может не быть доступа к вашим приватным SSH-ключам.

    • Переключите маркер на This account.
    • Укажите логин и пароль вашей учетной записи Windows (под которой вы настраивали SSH-ключи).
  2. Нажмите кнопку Install service.

Шаг 4. Запуск и проверка службы

  1. Откройте стандартный менеджер служб Windows (Win + R → services.msc).
  2. Найдите в списке службу с именем SSH Tunnel for Database.
  3. Нажмите по ней правой кнопкой мыши и выберите Запустить (Start).

Теперь туннель работает незаметно в фоновом режиме. Если у вас пропадет интернет или удаленный сервер временно перезагрузится, NSSM автоматически переподключит SSH-сессию, как только связь восстановится.

Как удалить службу?

Если туннель больше не нужен, удалить службу можно одной командой в PowerShell (от имени Администратора):

powershell

.\nssm.exe remove SSH-Tunnel-DB confirm

Заключение

Настройка SSH-туннеля в виде фоновой службы Windows полностью решает проблему «отваливающихся» консольных окон и экономит время при ежедневной разработке. Вы получаете безопасный, постоянный и изолированный доступ к удаленной инфраструктуре напрямую со своего рабочего места.