我想建立一个反向 SSH 隧道(使用OpenSSH_7.4
或更新)。目的是允许从中央服务器到多个设备的 SSH 连接,这些设备的任务(其中包括)建立隧道。中央服务器有一个已知的 IP,而设备则没有。
我通常会在其中一台设备上按以下方式执行此操作
ssh -R "4001:server:22" -p 22 user@server
这样我就可以从服务器连接到设备
ssh -p 4001 deviceuser@localhost
这是可行的(而且我不需要知道设备的 IP 地址)。
现在,我连接的不是单个设备,而是多个设备,每个设备都会创建一个反向隧道,并且需要在服务器上有一个单独的端口。此外,我想通过 ssh 重复连接到它们中的每一个。
因此,我想到了用套接字建立反向隧道,如下所示:
ssh -R "~/tmp/device.sock:server:22" -p 22 user@server
为了从服务器连接到设备
ssh -S ~/tmp/device.sock -p 22 deviceuser@device
我需要这里设备的 IP,但这不是主要问题。但是,我似乎无法让它发挥作用。第一个命令创建套接字,但使用第二个命令时出现错误,例如
Control socket connect(/home/user/tmp/device.sock): Connection refused
预期的行为是我可以通过隧道连接到设备,就像上面端口 4001 处的隧道一样,但基于套接字文件。我找不到任何简洁的资源,并且想知道我所尝试的实际上是否可行。
我假设我可以首先创建到端口 4001 的隧道,然后使用套接字启动 ssh 控制连接,但我仍然需要使用服务器上的多个端口。有足够的端口可用于我的目的,但我希望有一种更优雅的方法来实现这一点。