У меня была похожая проблема, и я исправил ее следующим образом:
Сначала на сервере я создал в домашнем каталоге скрипт .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
.
Может быть (возможно) есть лучший способ сделать это, но это работает для меня.