13

Служба SSH-тоннель на Windows Server

Прошу помощи, поделиться рабочими вариантами настройки постоянного SSH-тоннеля между терминальным сервером на Windows и VPN сервером на VDS. Нужно чтобы подключение работало как служба и переподключалось при разрыве. Вроде не сложная задача, но не могу решить.Идеально подходит PersistentSSH, но там для сервера только TRIAL. Поделитесь, пожалуйста, рабочими вариантами решения.

Лига Сисадминов

2.8K постов19.2K подписчиков

Правила сообщества

Мы здесь рады любым постам связанным с рабочими буднями специалистов нашей сферы деятельности.

Вы смотрите срез комментариев. Показать все
7
Автор поста оценил этот комментарий

Настройка постоянного SSH-туннеля между терминальным сервером на Windows и VPN-сервером на VDS может быть выполнена с использованием OpenSSH и службы Windows. Вот пошаговая инструкция:

### 1. Установка OpenSSH на Windows

1. Установите OpenSSH Client:

- Откройте "Параметры" -> "Приложения" -> "Дополнительные компоненты".

- Нажмите "Добавить компонент" и выберите "OpenSSH Client".

- Установите его.

2. Убедитесь, что OpenSSH доступен:

- Откройте командную строку и выполните ssh -V, чтобы убедиться, что OpenSSH установлен.

### 2. Создание SSH-туннеля

1. Создайте SSH-ключи (если их нет):

- Выполните команду:

ssh-keygen -t rsa -b 4096

- Сохраните ключи в стандартной папке (например, C:\Users\ВашеИмя\.ssh\).

2. Скопируйте публичный ключ на VDS:

- Скопируйте содержимое файла id_rsa.pub в ~/.ssh/authorized_keys на вашем VDS.

### 3. Настройка SSH-туннеля

1. Создайте скрипт для SSH-туннеля:

- Создайте файл tunnel.bat с содержимым:

ssh -o ServerAliveInterval=60 -o ExitOnForwardFailure=yes -N -R 2222:localhost:22 user@vds_ip

- Здесь:

- 2222 — порт на VDS, который будет перенаправлен на локальный порт 22.

- user@vds_ip — пользователь и IP-адрес вашего VDS.

### 4. Настройка службы Windows

1. Создайте службу:

- Скачайте и установите [NSSM](https://nssm.cc/) (Non-Sucking Service Manager).

- Откройте командную строку от имени администратора и выполните:

nssm install SSHTunnel

- В открывшемся окне укажите:

- Path: C:\Windows\System32\cmd.exe

- Startup directory: C:\Windows\System32

- Arguments: /c C:\path\to\your\tunnel.bat

- Нажмите "Install service".

2. Настройте службу:

- Откройте "Службы" (Win + R -> services.msc).

- Найдите службу SSHTunnel и настройте её:

- Установите тип запуска "Автоматически".

- В разделе "Восстановление" настройте перезапуск службы при сбое.

### 5. Запуск и проверка

1. Запустите службу:

- В "Службах" найдите SSHTunnel и запустите её.

2. Проверьте подключение:

- На VDS выполните:

ssh -p 2222 user@localhost

- Если всё настроено правильно, вы подключитесь к терминальному серверу через SSH-туннель.

### 6. Дополнительные настройки (опционально)

- Автоматическое восстановление соединения:

- Добавьте в скрипт tunnel.bat проверку соединения и переподключение:

:loop

ssh -o ServerAliveInterval=60 -o ExitOnForwardFailure=yes -N -R 2222:localhost:22 user@vds_ip

goto loop

- Логирование:

- Добавьте логирование в файл:

:loop

ssh -o ServerAliveInterval=60 -o ExitOnForwardFailure=yes -N -R 2222:localhost:22 user@vds_ip >> C:\path\to\logfile.log 2>&1

goto loop

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

раскрыть ветку (14)
1
Автор поста оценил этот комментарий

Удивительно, но работает.

Исходные данные: сервер VDS подключение по SSH на стандартном порту, на сервере поднят OPENVPN на порту 1194 TCP, пользователь root

0. Материм Роскомпозор что заставляет этим заниматься.

На сервере Windows:

1. Скачиваем и устанавливаем OpenSSH клиент https://github.com/LumitoLuma/OpenSSH-for-Windows/releases.

2. Скачиваем https://nssm.cc/ Сокращаем название и копируем в ProgramFiles

3. Создаём ключ SSH командой в командной строке


ssh-keygen -t rsa -b 4096


Несколько раз нажимаем Enter чтобы согласиться со всеми параметрами по умолчанию. В папке пользователя от которого работаем создаётся папка .ssh в ней id_rsa.pub . Копируем его содержимое.

Идём на VDS

4. Открываем

nano /root/.ssh/authorized_keys

Дописываем скопированный ключ с новой строки. Закрываем, сохраняем.

5. Включаем возможность проброса порта. Открываем

nano /etc/ssh/sshd_config

Раскоментируем и включаем AllowTcpForwarding yes

6. Перезагружаем службу SSH

service sshd restart


На сервере Windows:

7. Пробуем установить соединение - в cmd:

ssh -o ServerAliveInterval=60 -o ExitOnForwardFailure=yes -N -L 1194:localhost:1194 root@IPАДРЕСVDS


Принимаем отпечаток командой yes

8. Создаём файл tunnel.bat со следующим содержимым:


:loop

ssh -o ServerAliveInterval=60 -o ExitOnForwardFailure=yes -N -L 1194:localhost:1194 root@IPАДРЕСVDS

goto loop


9. Создаём службу. Запускаем cmd от имени админа, переходим в папку NSSM

cd C:\Program Files\nssm\win64

nssm install SSHTunnel

В открывшемся окне указать:

Path: C:\Windows\System32\cmd.exe

Startup directory: C:\Windows\System32

Arguments: /c "Здесь путь до tunnel.bat"

Нажать "Install service".

Открываеv службы, настраиваем запуск службы SSHTunnel от учётной записи, в которой создавали ключи. Файл tunnel.bat так же должен быть доступен для этой учётной записи. Настраиваем перезапуск службы при сбое. Запускаем службу, проверяем доступность порта

telnet localhost 1194

10. В конфиге OVPN подключения меняем IPАДРЕСVDS на localhost. Перезапускаем OVPN соединение. Радуемся.

PS. Если у вас не серверная ОС, скачиваете программу PersistentSSH, в бесплатной версии доступен 1 тоннель с авторизацией по логbну и паролю. Всё настраивается легко, просто и в GUI. Купить программу пока невозможно, сайт разработчика недоступен.

0
Автор поста оценил этот комментарий
Не то, чтобы я пробовал, но мне думается, что и без nssm можно обойтись. Служба в Винде не сложнее чем в никсах устанавливается
раскрыть ветку (9)
0
DELETED
Автор поста оценил этот комментарий

NSSM is a service helper program similar to srvany and cygrunsrv. It can start any application as an NT service and will restart the service if it fails for any reason.

раскрыть ветку (8)
0
Автор поста оценил этот комментарий
Так то никто не мешает сделать sc.exe create blablabla и не ставить сторонний софт
раскрыть ветку (7)
0
DELETED
Автор поста оценил этот комментарий

sc предназначен именно для программ написанных как сервисы. Кому что удобней. Если у программы гуй и у нее нет исходного кода, то это спасет.

Есть и такая штука https://www.npmjs.com/package/os-service для node.js

While SC will happily install any executable as a windows service, it should only be used to install executables that are already Windows Services. If you use SC to install a regular exe, your service will fail with Error 1053 when you try to start it. Your Go exe, which does not implement the Windows Service interface, falls victim to this situation.

You've said that sc works for your other executables, so those executables must be using the svc package or some equivalent. You cannot use sc directly on an executable that was not built to be a service. This doesn't work, ever. (Of course, you can use sc indirectly, by pointing it at srvany.exe or nssm.exe or equivalent.)

раскрыть ветку (6)
0
Автор поста оценил этот комментарий

ну так там, выше, батник просто запускается, нет у него гуи, по сути.

раскрыть ветку (5)
0
DELETED
Автор поста оценил этот комментарий

У него ничего нет. Из батника просто так сервис не сделаешь и что делать, если он упадет? Как вести логи?

Есть еще instsrv.exe и srvany.exe из Resource Kit и Autoit. Я последним пользуюсь, но оно файлы слоновьего размера генерирует.


Меня больше всего тут интересует -o ExitOnForwardFailure=yes. Всегда ли работает?

раскрыть ветку (4)
0
Автор поста оценил этот комментарий

Ну я не знаю, чего тебе еще надо . Уж запускать не стал, сорян. Ну упадёт, во вкладочке Восстановление поставь перезапуск, какие проблемы?

Иллюстрация к комментарию
раскрыть ветку (3)
0
DELETED
Автор поста оценил этот комментарий

goto loop же.

Нужна некая диагностика и логи.

раскрыть ветку (2)
0
Автор поста оценил этот комментарий

Ну и диагностируй по логим системного журнала, кто мешает? Более того, по частым рестартам можешь прогу свою запускать. Ты ваще админ или где, такие простые проблемы не решаешь) Суть то не в этом, я про то, что левые проги не нужны, все средствами ОС делается.

раскрыть ветку (1)
0
DELETED
Автор поста оценил этот комментарий

nssm логами занимается и много чем. Это 275 Кб кода на С.

Это не левая прога. Левая прога это винды )

0
Автор поста оценил этот комментарий

Перплексити?

раскрыть ветку (1)
1
Автор поста оценил этот комментарий

Дипсик. ТС отпишитесь, как решение работает\не работает

Автор поста оценил этот комментарий

ИИ всемогущ...

Вы смотрите срез комментариев. Чтобы написать комментарий, перейдите к общему списку

Темы

Политика

Теги

Популярные авторы

Сообщества

18+

Теги

Популярные авторы

Сообщества

Игры

Теги

Популярные авторы

Сообщества

Юмор

Теги

Популярные авторы

Сообщества

Отношения

Теги

Популярные авторы

Сообщества

Здоровье

Теги

Популярные авторы

Сообщества

Путешествия

Теги

Популярные авторы

Сообщества

Спорт

Теги

Популярные авторы

Сообщества

Хобби

Теги

Популярные авторы

Сообщества

Сервис

Теги

Популярные авторы

Сообщества

Природа

Теги

Популярные авторы

Сообщества

Бизнес

Теги

Популярные авторы

Сообщества

Транспорт

Теги

Популярные авторы

Сообщества

Общение

Теги

Популярные авторы

Сообщества

Юриспруденция

Теги

Популярные авторы

Сообщества

Наука

Теги

Популярные авторы

Сообщества

IT

Теги

Популярные авторы

Сообщества

Животные

Теги

Популярные авторы

Сообщества

Кино и сериалы

Теги

Популярные авторы

Сообщества

Экономика

Теги

Популярные авторы

Сообщества

Кулинария

Теги

Популярные авторы

Сообщества

История

Теги

Популярные авторы

Сообщества

Недвижимость и ремонт

Теги

Популярные авторы

Сообщества