如何保持 SSH 隧道畅通

如何保持 SSH 隧道畅通

大家好,我有一个 shell 脚本,它可以做很多事情,包括打开到特定服务器和服务的 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
}

我的问题是,如何保持隧道处于活动状态,以及如何在终止隧道时终止“保持活动机制”。我想我必须使用当做完成时循环,但我不知道如何实现这一点。

非常感谢,亚历克斯

答案1

在 (HOMEDIR)/.ssh/config 中,添加以下内容:

Host *
ServerAliveInterval 60

相关内容