如何配置与连接计算机的反向 SSH 连接?

如何配置与连接计算机的反向 SSH 连接?

我将在不久的将来部署许多位于路由器后面的机器。在每个路由器上设置动态 DNS 和端口转发是不可行的,因此有没有一种方法可以配置这些计算机以启动到我的计算机的 TCP 连接,然后让我的计算机通过以下方式启动到远程计算机的 SSH 连接:那个连接?

IE:

COMPUTER A OPENS TCP CONNECTION TO COMPUTER B
COMPUTER B OPENS SSH CONNECTION OVER THE EXISTING TCP CONNECTION TO COMPUTER A
COMPUTER B NOW HAS SSH CONNECTION TO COMPUTER A

这可能吗?如果可以,我该怎么做?

答案1

/etc/ssh/sshd计算机B放:

AllowTcpForwarding yes
TCPKeepAlive yes

电脑A:

$ ssh -R 2222:localhost:22 ip.of.computer.b

计算机B:

$ ssh localhost -p 2222

请注意,2222 是我选择的任意高端口号。然后,计算机 B 上的该端口将通过计算机 A 上初始化的 SSH 连接通过隧道返回到端口 22。如果您有多台计算机,则应为每台计算机使用不同的端口。

对于您的用例,您可能希望从脚本运行它,以便可以将其设为守护程序,并在链接断开时定期尝试重新连接。您可能需要一个带有外壳的特殊/bin/true帐户计算机B处理传入的连接。然后,您可以为每台允许“回拨”的计算机设置一个或多个密钥。

电脑A您可能会发现-n,-N-T选项有助于将其与本地输入断开连接(以便它可以在后台运行),而不是尝试运行任何远程命令,只需打开隧道,而不创建 tty。

大多数产生守护进程的常规方法对于设置这样的网络隧道来说效果不佳。网络连接出现问题会导致它试图翻墙以通过。一个带有睡眠等待的简单循环应该可以解决问题。十分钟是一个不错的数字,因为如果出现问题(例如计算机B离线),但如果连接断开,它仍然可以让您相当快地恢复。

#/bin/sh
while true; do
    sleep $((60*10))
    ssh -nNT -R 2222:localhost:22 ip.of.computer.b
done

这样的脚本可以在启动时启动运行/etc/rc.local。您登录计算机的第一次更改将在大约十分钟后开始电脑A靴子。

相关内容