Добрый день, у меня есть сценарий оболочки, который выполняет множество функций, включая открытие туннелей 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