Autokill сломал обратный SSH туннелей - PullRequest
0 голосов
/ 22 марта 2019

У меня есть 1 сервер, который находится за NAT и брандмауэром, и у меня есть другой сервер, доступный через домен.Сервер за NAT и межсетевым экраном работает в облачной среде и предназначен для одноразового использования, т. Е. В случае его поломки мы можем просто повторно развернуть его с помощью одного сценария, в данном случае это OpenStack, использующий тепловой шаблон.Когда этот сервер запускается, он запускает следующую команду, чтобы создать обратный туннель SSH к серверу за пределами NAT и брандмауэра, чтобы мы могли подключиться через порт 8080 на этом сервере.Проблема, с которой я сталкиваюсь, заключается в том, что кажется, что этот туннель OpenSSH сломан (возможно, сервер отключен), туннель остается, то есть, когда мы повторно развернем тепловой шаблон для повторного запуска сервера, он больше не сможет подключиться к этому порту, еслиЯ заранее убил процесс ssh на сервере за пределами NAT.

Вот команда, которую я использую в настоящее время для запуска обратного туннеля:

sudo ssh -f -N -T -R 9090:localhost:80 user@example.com

1 Ответ

0 голосов
/ 22 марта 2019

У меня была похожая проблема, и я исправил ее следующим образом:

Сначала на сервере я создал в домашнем каталоге скрипт .kill_tunel_ssh.sh со следующим содержимым:

#this finds the process that is opening the port 9090, finds its PID and kills it
sudo netstat -ltpun | grep 9090 | grep 127 | awk -F ' ' '{print $7}' | awk -F '/' '{print $1}' | xargs kill -9

Затем на клиенте я создал скрипт под названием connect_ssh.sh с таким содержанием:

#this opens a ssh connection, runs the script .kill_tunnel_ssh.sh and exit
ssh user@remote.com "./.kill_tunel_ssh.sh"

#this opens a ssh connection opening the reverse tunnel
ssh user@remote.com -R 9090:localhost:80

Теперь я всегда использую connect_ssh.sh, чтобы открыть соединение SSH, вместо того, чтобы напрямую использовать команду ssh.

Требуется user на удаленном хосте для настройки sudo без запроса пароля при выполнении команды netstat.

Может быть (возможно) есть лучший способ сделать это, но это работает для меня.

...