美好的一天,我有一个 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
}
我的问题是,如何让隧道保持活动状态,以及在终止隧道时如何终止“保持活动机制”。我想我必须使用while do done循环,但我不知道如何实现它。
非常感谢,亚历克斯
在 (HOMEDIR)/.ssh/config 中,添加: