我使用下面的脚本向一堆服务器打开ssh隧道,这些服务器总是在mysql、redis和ssh端口之间变化。我是在公司vpn工作的时候做这件事的,但我以前在办公室工作的时候也遇到过同样的问题。
通常,我启动脚本并使用打开的连接与其他工具(如SequelPro或PhpStorm )连接到use服务器或数据库。理想情况下,它只是运行,直到我不再需要它,然后我将退出jumpserver,连接应该关闭。这是好的,只要我不松开连接,并被赶出jumpserver。
#!/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服务器,在那里我不应该更改设置。
发布于 2022-05-10 08:35:01
就像这样,有一点提示:
要获得最后执行的命令的PID,您必须键入:
echo "$!"因此,您可以做的就是在每个ssh登录命令之后存储PID,例如:
#Store the pid of the last command in a variable named sshPid:
sshPid=$!当您完成时,只需用以下方法杀死相应的PID:
kill ${sshPid}告诉我这对你有用吗?
布吉
https://stackoverflow.com/questions/72171547
复制相似问题