Build SSH Tunnel

使用场景

机器代号操作系统机器位置IP账户名ssh/sshd 端口
OuterNetCentOS 7公网50.100.50.100OuterUser22
LocalNetCentOs 7内网(局域网)10.200.100.10LocalUser22

想要通过公网上的机器 OuterNet 访问内网机器 LocalNet

并能够使用 OuterNet 机器的 10022 端口访问 LocalNet 机器的 22 端口

相当于

1
[OuterUser@OuterNet] $ ssh -p 10022 LocalUser@127.0.0.1

替代在内网时候

1
$ ssh LocalUser@10.200.100.10

建立简单的 ssh 反向隧道

  1. 在 LocalNet 机器上执行以下命令建立隧道
1
[LocalUser@LocalNet] $ ssh -p 22 -qngfNTR 10022:localhost:22 OuterUser@50.100.50.100

或(以下参数似乎比较稳定)1

1
[root@LocalNet] $ ssh -fN -R :55555:localhost:22 50.100.50.100
  1. 在 OuterNet 上连接 LocalNet
1
[OuterUser@OuterNet] $ ssh -p 10022 LocalUser@127.0.0.1

维持隧道

  1. 安装 autossh
1
[LocalUser@LocalNet] $ sudo yum install autossh
  1. 内网建立隧道
1
[LocalUser@LocalNet] $ autossh -p 22 -M 7777 -NR 10022:localhost:22 OuterUser@50.100.50.100
  1. 在 OuterNet 上连接 LocalNet
1
[OuterUser@OuterNet] $ ssh -p 10022 LocalUser@127.0.0.1

监听 0.0.0.0

如果需要监听 0.0.0.0 需要在服务端,即公网机器上开启 GatewayPorts

在 /etc/ssh/sshd_config 中把 GatewayPorts 设为 yes

参考

Licensed under CC BY-NC-SA 4.0
使用 Hugo 构建
主题 StackJimmy 设计