Autokill打破了反向ssh隧道

问题描述 投票:-1回答:1

我有一台服务器在NAT和防火墙后面,我有另一个位于另一个可通过域访问的位置。 NAT和防火墙背后的服务器在云环境中运行,并且设计为一次性的,即如果它中断,我们可以简单地用单个脚本重新部署它,在这种情况下,它是使用热模板的OpenStack。当该服务器启动时,它运行以下命令以创建到NAT和防火墙外部服务器的反向SSH隧道,以允许我们通过该服务器上的端口8080进行连接。我遇到的问题是,似乎OpenSSH隧道被破坏(服务器可能会关闭)隧道仍然存在,这意味着当我们重新部署热模板以再次启动服务器时,它将无法再连接到该端口,除非我事先杀死了NAT外部服务器上的ssh进程。

这是我目前用来启动反向隧道的命令:

sudo ssh -f -N -T -R 9090:localhost:80 [email protected]
ssh ssh-tunnel
1个回答
0
投票

我有一个类似的问题,并以这种方式修复它:

首先,在服务器上,我在主目录中创建了一个名为.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 [email protected] "./.kill_tunel_ssh.sh"

#this opens a ssh connection opening the reverse tunnel
ssh [email protected] -R 9090:localhost:80

现在,我总是使用connect_ssh.sh来打开SSH连接,而不是直接使用ssh命令。

它需要远程主机上的user配置sudo,而不需要在执行netstat命令时输入密码。

也许(可能)有更好的方法来实现它,但这对我有用。

© www.soinside.com 2019 - 2024. All rights reserved.