![如何为 shell 提供“反向 ssh”?](https://linux22.com/image/1324352/%E5%A6%82%E4%BD%95%E4%B8%BA%20shell%20%E6%8F%90%E4%BE%9B%E2%80%9C%E5%8F%8D%E5%90%91%20ssh%E2%80%9D%EF%BC%9F.png)
设想:
许多嵌入式设备(运行 Linux)位于现场,在路由器后面,因此经过 NAT,我们无法与它们建立连接。
我们需要一名支持人员能够在任何设备上启动终端/shell 会话。
他们的本地终端也将在公司防火墙后面进行 NAT,因此我们需要一些他们和设备都可以连接的中央“会面点”。
如果有必要,我们可以要求支持人员登录某种终端服务器,但我更喜欢在他们的桌面上弹出一个终端窗口的解决方案。
我们可以(通过其他方式)告诉设备执行一些任意脚本或应用程序来启动会话。
如果没有 NAT,我们只需通过 SSH 连接到设备即可。但是在这个 NAT 环境中我有什么选择呢?
如果需要,我们可以在任一端或会面点服务器开发代码,但显然如果有应用程序,我们就不必编写东西,那就更好了。
欢迎指出我可能遗漏的其他问题(尽管我已经查看过)或我应该考虑用于中央“会议点”服务器的应用程序
答案1
我建议打开从嵌入式设备到您控制的服务器(我们称之为服务器)的 SSH 连接,并创建到嵌入式设备端口 22 的反向端口转发。您需要在服务器上使用非静态端口号,因为您有并行连接。例如,假设您将服务器端口 2222 反向端口转发到嵌入式设备端口 22。然后您(或支持人员)可以通过连接到服务器端口 2222 来启动到嵌入式设备的完整 ssh 连接。此连接可以从 NAT 环境中启动。您仍然需要将服务器放在公共 IP 上,但即使某种 dyndns 解决方案也足够了。
ssh连接建立后,可以停止SERVER上2222端口的监听(即拆除反向端口转发),这样SERVER上只需要在建立新连接期间保留监听端口即可。
请参阅man ssh
并查看标志-L
和-R
。我认为您想使用-R
。请注意启用选项的bind address
和要求。请参阅部分以获取示例。如果您需要在嵌入式设备上编写其他脚本,另请参阅和配置选项。GatewayPorts
TCP FORWARDING
-f
ExitOnForwardFailure