Назад | Перейти на главную страницу

Как сохранить SSH-туннель живым

Добрый день, у меня есть сценарий оболочки, который выполняет множество функций, включая открытие туннелей SSH для определенных серверов и служб. Нет проблем с настройкой туннеля, протестируйте его и отключите. Но у меня проблема с поддержанием активности туннелей. К сожалению, я не могу изменить конфигурацию на сервере, поэтому мне нужно реализовать какой-то «механизм поддержания активности» на моей стороне. Вот функция, которая открывает туннель:

ssh_tunnel_up () {
  if lsof -Pi :${local_port} -sTCP:LISTEN -t > /dev/null ; then
  echo "Port is in use, please check with netstat -anlp | grep   ${local_port}. Exiting..."
else
/usr/bin/ssh -24 -fN ${username}@${node_dev} -L ${server_local_port}:${server_dev}:${server_remote_port}
   if [[ $? -eq 0 ]]; then
    echo "Tunnel to Server UI created successfully"
   else
    echo "An error occurred creating a tunnel  RC was $?"
   fi
 fi

}

Вот функция, которая завершает туннель:

ssh_tunnel_down () {
   if lsof -Pi :${local_port} -sTCP:LISTEN -t >/dev/null ; then
     while lsof -t -i:${local_port} > /dev/null ; do
       echo "Port is in use. Closing the port"
       kill -9 $( lsof -t -i:${local_port} )
       sleep 1
     done
   else
     echo "Port is already free. Nothing to do. Exiting..."
   fi
}

Мой вопрос в том, как сохранить туннель в рабочем состоянии и как отключить «механизм поддержания активности», когда вы завершаете туннель. Думаю, мне нужно использовать пока делать цикл, но я не могу понять, как это реализовать.

Большое спасибо, Алекс

В (HOMEDIR) /. Ssh / config добавьте это:

Host *
ServerAliveInterval 60