如何通过每个人都可以访问的服务器隧道连接到无法访问的远程机器?

kch*_*kch 4 ssh unix tunnel macos

机器:

  • 让我们称我的机器为macbook
  • 我在 tah 互联网上有一台服务器。称之为服务器
  • 我在别处有一台 Mac Mini,我可以通过 iChat 屏幕共享访问它。我们称之为mini

可达性:

  • 服务器既看不到macbook也看不到mini
  • macbook可以看到server而不是mini
  • mini可以看到服务器,但不能看到macbook

屏幕共享很慢。我想要一个到mini的 SSH 连接。由于路由器、NAT 等原因,无法直接连接。

我想要做的是通过 SSH将macbookmini连接到服务器,创建适当的隧道,这样我就可以从macbook运行ssh …命令来通过server建立连接隧道来连接到mini

所以我的问题是,我必须在哪些机器上运行哪些命令才能使其工作?

为简单起见,请在答案中使用serverminimacbook作为主机名。

Llo*_*eki 6

只需要一个 ssh 隧道。从迷你:

ssh -N -R 0.0.0.0:8022:localhost:22 serverUser@server

现在你可以从 macbook 连接到服务器 ssh -p 8022 miniUser@server

一定有GatewayPorts设置yes在服务器的/etc/ssh/sshd_config

另外你可能想在 ~/.ssh/config 中定义一些东西:

Host gate.mini
    HostName server
    Port 8022
    HostKeyAlias mini
Run Code Online (Sandbox Code Playgroud)

这可以让你做的更连贯ssh miniUser@gate.mini,同时不会被服务器指纹不匹配所困扰。


Sco*_*ott 5

在 Mac Mini 上执行以下操作:

ssh -R 1234:localhost:22 serverUser@server
Run Code Online (Sandbox Code Playgroud)

这会将服务器端口 1234 的连接转发到 Mac Mini 上的端口 22。

然后,在 MacBook 上执行以下操作:

ssh -L 1235:localhost:1234 serverUser@server
Run Code Online (Sandbox Code Playgroud)

这会将 MacBook 上端口 1235 的连接转发到服务器上的端口 1234(然后通过上述命令转发到 Mac Mini)。

最后,要获得实际连接,请在 MacBook 上执行以下操作:

ssh -p 1235 miniUser@localhost
Run Code Online (Sandbox Code Playgroud)

它连接到 MacBook 上的端口 1235,该端口被转发到服务器上的端口 1234,该端口被转发到 Mac Mini 上的端口 22。端口 1234 和 1235 可以或多或少地设置为您喜欢的任何值 - 并且可以相同(我使用不同的数字以使解释更清楚)。同样,如果 Mac Mini 上的 SSH 正在侦听不同的端口,则应更改端口 22。