我想通过公共可访问服务器(公共)连接到 NAT 后面的我的计算机(本地)。
在本地:
ssh -g -R 8000:localhost:22 user@public
Run Code Online (Sandbox Code Playgroud)
然后公开:
ssh -p 8000 user@public
Run Code Online (Sandbox Code Playgroud)
但我越来越 error: Connection refused.
当我登录到公共服务器时,我可以通过以下方式验证隧道是否正常工作:
ssh -p 8000 localhost
Run Code Online (Sandbox Code Playgroud)
它在本地计算机上打开 ssh。
我怀疑公共服务器应该充当透明代理有什么问题吗?或者如何让它像那样工作。
我正在尝试使用 SSH 服务器作为连接多个内部服务器的网关。在这种情况下,内部意味着它们不能直接访问,它们没有分配给它们的公共 IP。
所以场景应该是这样的(例如有 2 个服务器,可能更多),网关公共 IP 123.456.789.45 内部为 10.12.40.13
+--------+ +---------+ +----------+
| client |--> 2214/tcp --> | | --> 22/tcp --> | Server 1 |
+--------+ | | +----------+
| Gateway |
+--------+ | | +----------+
| client |--> 2215/tcp --> | | --> 22/tcp --> | Server 2 |
+--------+ +---------+ +----------+
Run Code Online (Sandbox Code Playgroud)
我的第一种方法是将它们从网关设置到服务器,类似于
ssh -N -L 123.456.789.45:2214:127.0.0.1:22 tunnel-user@server1
ssh -N -L 123.456.789.45:2215:127.0.0.1:22 tunnel-user@server2
Run Code Online (Sandbox Code Playgroud)
虽然这可行,但我偶然发现了隧道不太可靠的问题,到处都失败了。合乎逻辑的下一步是尝试autossh
运行。在这里我遇到了很多问题。可以毫无问题地建立第一个隧道
autossh -M 20000 -f -N -L …
Run Code Online (Sandbox Code Playgroud)