LINUX.ORG.RU
решено ФорумAdmin

Проброс порта: ssh держит порт на сервере при обрыве соединения

 , , ,


1

1

1. Пробрасываю порт через SSH такой командой:

ssh user@site.com -4 -N -g -f -M -R 127.0.0.1:8888:127.0.0.1:8888

Какое-то время работает, потом соединение умирает.
Убиваю на клиенте (на этой стороне) «ssh» командой «kill».

2. Запускаю ssh проброс снова, но ругается в консоль:

Warning: remote port forwarding failed for listen port

На сервере ничего подозрительного не висит.
Через минут 5 сервер всё-таки освобождает порт.

Вопрос: Как принудить ssh освобождать порт на сервере сразу же после обрыва?

★★★★★

Последнее исправление: Novator (всего исправлений: 1)

Ответ на: комментарий от zolden

Нашёл-таки в дебрях гугля решение:

ssh user@site.ru -4 -N -g -f -M -R 127.0.0.1:5577:127.0.0.1:5577 -o ExitOnForwardFailure=yes -o ServerAliveInterval=30

Как я понял:
ExitOnForwardFailure=yes - освобождает порт на сервере при разрыве;
ServerAliveInterval=30 - каждые 30 сек посылает пакет (по умолчанию 0, т.е. «пинг» выключен, поэтому ssh и дохнет).

Novator ★★★★★
() автор топика

Моё конечное решение в виде скрипта (может кому пригодится):

#!/bin/sh -e

while true; do
  echo "Do port forward..."
  sshpass -p 'YouPassword' ssh user@site.ru -4 -N -g -M -R 127.0.0.1:8888:127.0.0.1:8888 -o ExitOnForwardFailure=yes -o ServerAliveInterval=30
  sleep 2
done

Работает без участия человека и восстанавливает проброс порта при любых разрывах :)

P.S. В скрипте убран параметр "-f", чтобы ssh не уходил в фон - цикл должен тормозиться на время работы проброса.

Novator ★★★★★
() автор топика
Ответ на: комментарий от Novator

Если получилось, Warning: remote port forwarding failed for listen port, и у тебя эта опция включена. Тогда наступает terminate session. Скорее всего ты этого варнинга не увидешь, просто завершиться процесс. А не так как ты сказал, что порт освободится…

anonymous
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.