From c86633d531937451251a449601f749f52e7f9807 Mon Sep 17 00:00:00 2001 From: Alexey S Date: Thu, 4 Jun 2026 16:14:19 +0300 Subject: [PATCH] +++ --- ...а-постоянного-SSH-туннеля-в-виде-службы-Windows.md | 108 ++++++++++++++++++ 1 file changed, 108 insertions(+) create mode 100644 Настройка-постоянного-SSH-туннеля-в-виде-службы-Windows.md diff --git a/Настройка-постоянного-SSH-туннеля-в-виде-службы-Windows.md b/Настройка-постоянного-SSH-туннеля-в-виде-службы-Windows.md new file mode 100644 index 0000000..e7aeb72 --- /dev/null +++ b/Настройка-постоянного-SSH-туннеля-в-виде-службы-Windows.md @@ -0,0 +1,108 @@ +# Настройка постоянного 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)** — [бесплатная микро-утилита](https://nssm.cc/builds), которая превращает любой консольный скрипт или команду в полноценную службу Windows с функцией автоперезапуска. + +## Шаг 1. Настройка авторизации по SSH-ключам + +Служба Windows работает в фоновом режиме без участия пользователя, поэтому она не сможет запросить пароль для подключения к удаленному серверу. Необходимо настроить беспарольный вход по SSH-ключу. + +1. Откройте PowerShell и создайте пару ключей (если их еще нет): + +**powershell** +``` +ssh-keygen -t ed25519 +``` +2. Скопируйте публичный ключ на удаленный сервер (содержимое файла ~/.ssh/id_ed25519.pub нужно добавить в файл ```~/.ssh/authorized_keys``` на сервере). + +3. Проверьте подключение из консоли. Вы должны заходить на сервер без ввода пароля: +**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 +``` + +3. Откроется графический интерфейс настройки службы. Заполните вкладки следующим образом: + + **Вкладка 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-ключи). + +4. Нажмите кнопку **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 полностью решает проблему «отваливающихся» консольных окон и экономит время при ежедневной разработке. Вы получаете безопасный, постоянный и изолированный доступ к удаленной инфраструктуре напрямую со своего рабочего места. +