如何关闭通过脚本打开的ssh连接



我使用下面的脚本打开一个ssh隧道到一堆服务器总是在mysql, redis和ssh端口之间变化。我是在公司的vpn中这样做的,但是我以前也有过同样的问题,当你在办公室工作的时候。

通常我启动脚本并使用与其他工具(如SequelPro或PhpStorm)打开的连接连接到web服务器或数据库。理想情况下,它将运行直到我不再需要它,然后我将退出跳跃服务器,连接应该关闭。这很好,只要我不失去连接,并被踢出跳跃服务器。

#!/bin/sh
username="my-user"
jumpServer="my.bastionserver.net"
hosts=("my.awsserver1.com" "my.awsserver2.com" "my.awsserver3.com")
destMysqlPort=3306
destSshPort=22
destRedisPort=6379
x=10001
y=10002
z=10003
for i in "${hosts[@]}"; do
:
server=$i
sshTunnel="$sshTunnel -L $x:$server:$destMysqlPort -L $y:$server:$destSshPort -L $y:$server:$destRedisPort"
echo "Server: $server -- MYSQL: $x -- SSH: $y-- Redis: $z"
x=$((x + 3))
y=$((y + 3))
z=$((z + 3))
done
if [ -z "$sshTunnel" ]
then
echo "ssh tunnels are empty"
else
ssh $sshTunnel $username@$jumpServer -i ~/.ssh/aws
fi

输出如下:

$ ./awstunnel.sh
Server: my.awsserver1.com -- MYSQL: 10001 -- SSH: 10002-- Redis: 10003
Server: my.awsserver1.com -- MYSQL: 10004 -- SSH: 10005-- Redis: 10006
Server: my.awsserver1.com -- MYSQL: 10007 -- SSH: 10008-- Redis: 10009
[...]

当我尝试通过这个脚本再次连接时,我得到的消息是地址已经在使用中:

bind [127.0.0.1]:10002: Address already in use
channel_setup_fwd_listener_tcpip: cannot listen to port: 10002
bind [127.0.0.1]:10005: Address already in use
channel_setup_fwd_listener_tcpip: cannot listen to port: 10005
[...]

我如何修改脚本,以便我可以立即重新启动它,而不必等待相当长的一段时间,直到通过该隧道的连接真正关闭?

我在Mac上工作,而jumpserver是Linux服务器,我不应该更改设置。

就像这样,一个小提示:

要获得最后执行的命令的PID,您必须键入:

echo "$!"
因此,您可以做的就是在每个ssh登录命令之后存储PID,例如:
#Store the pid of the last command in a variable named sshPid: 
sshPid=$!

,当你完成后,只需杀死相应的PID:

kill ${sshPid}

告诉我这是否适用于你:p

Bguess

相关内容

  • 没有找到相关文章

最新更新