![SSH-远程转发-确保连接始终处于活动状态](https://linux22.com/image/1617642/SSH-%E8%BF%9C%E7%A8%8B%E8%BD%AC%E5%8F%91-%E7%A1%AE%E4%BF%9D%E8%BF%9E%E6%8E%A5%E5%A7%8B%E7%BB%88%E5%A4%84%E4%BA%8E%E6%B4%BB%E5%8A%A8%E7%8A%B6%E6%80%81.png)
我有两台服务器。
Server A
位于路由器后面,我没有管理员权限。- 它有一个用户:
userA
- 它有一个用户:
Server B (example.com)
是具有公网ip的云服务器。- 它有一个用户:
userB
- 它有一个用户:
我在 上运行以下命令,将与端口 上Server A
建立的任何连接转发回端口 上:Server B
8022
Server A
22
ssh -R *:8022:localhost:22 [email protected]
这将创建一个 ssh 连接,并且我打开了一个会话[email protected]
如果我随后打开另一个终端(在另一台计算机上)并通过 ssh 进入[email protected]
,一旦连接运行,ssh userA@localhost -p 8022
我就有一个活动的 ssh 连接Server A
这对我来说是新鲜事,但一切似乎都有道理。
我想确保初始远程转发连接ssh -R
始终处于活动状态。这意味着如果连接断开,我需要它重新连接。如果Server A
重新启动,我需要它在启动时连接。
我该如何做这件事?
有没有更好的方法?
答案1
根据@Kamil 的评论我使用了autossh
。
Server B
但是如果我重新启动autossh
似乎就会退出。
我编写了以下脚本并让它在 cron 上每分钟运行一次Server A
:
#!/bin/bash
if [ ! -f /proc/$(cat /home/userA/tunnel.pid)/status ]; then
nohup autossh -M 20000 -R 8022:localhost:22 [email protected] -N > /dev/null 2>&1 &
echo $! > /home/userA/tunnel.pid
fi
这似乎可以确保 ssh 连接始终运行(一分钟内),无论服务器关闭连接还是重新启动。
如果有更好的方法,或者我误解了全部潜力,autossh
我会接受更好的答案