SSH-远程转发-确保连接始终处于活动状态

SSH-远程转发-确保连接始终处于活动状态

我有两台服务器。

  • Server A位于路由器后面,我没有管理员权限。
    • 它有一个用户:userA
  • Server B (example.com)是具有公网ip的云服务器。
    • 它有一个用户:userB

我在 上运行以下命令,将与端口 上Server A建立的任何连接转发回端口 上:Server B8022Server A22
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我会接受更好的答案

相关内容