SSH -R 远程端口转发

下次不要找借口说内网机器没法 SSH 远程登陆,我们要不要 QQ 远程之类的 ...


角色

  • 主机 A
  • 主机 B
  • 主机 C

注意下文将用 A, B, C 指代它们,在命令里面也用 A, B, C 代表他们的域名。

网络情况

  • A 能单向访问 B
  • C 能单向访问 B
  • A 和 C 互不相通
A => B <= C

一般情况下 A 和 C 分别处于两个不相干的内网,B 是一台可以公共访问的 VPS.

目标

利用 B 的转发,让 C 访问 A 的 8888 端口

操作步骤

1. 在 A 执行

ssh -vNR 8889:127.0.0.1:8888 -p 22 user@B

2. 现在 C 就可以通过 B:8889 间接访问 A:8888 了

$ curl http://B:8889  # 通过隧道转发到 http://A:8888

3. 如果上面遇到了挫折

可能是由于 SSH 服务端没有设置 GatewayPorts yes,这种情况下映射端口仅绑定在 127.0.0.1 上,无法通过外网访问。请查看一下配置文件 /etc/ssh/sshd_config,具体修改方式请自行了解。


❤ 其实用这个方法,可不仅仅是能让 C 访问 A 那么简单。
任何 A 能直接访问的内网服务,都可以通过这种方法分享给 B,比如 A 所在内网有个 Redis 服务 D:6379,想要让 C 访问,C 并不需要知道知道 D 的存在。

仍然是在主机 A 上操作,执行如下命令:

$ ssh -vNR 6380:D:6379 -p 22 user@B

▲请仔细观察与上一个命令的不同之处▲

然后就可以在 C 访问 Redis 服务了:

$ redis-cli -h B -p 6380

你可能感兴趣的:(SSH -R 远程端口转发)