1 功能

我有一个公网地址,想把本地服务通过公网地址暴露出来,供外部调用,方法如下:

2 说明

这个过程被称为反向 SSH 隧道或 SSH 远程端口转发。在这个过程中,你实际上是在本地机器 A 上建立了一个到云服务器 B 的 SSH 连接,并通过这个连接将云服务器 B 上的某个端口(例如 8080)转发到本地机器 A 的另一个端口(例如 80)。

在这个设置中,GatewayPorts yes 的配置是必要的,它允许从云服务器 B 的任何地址来的连接都能够连接到转发的端口(在这个例子中是 8080 端口)。

3 操作

在有公网 IP 的机器 B 上运行:

1
2
3
$ vi /etc/ssh/sshd_config
修改:GatewayPorts yes
$ sudo systemctl restart ssh

在本地机器 A 上运行:

1
$ ssh -NTf -R 公网端口:本地机器IP:本地端口 用户名@公网机器IP

如果想设置断开重连,用 autossh 替换 ssh

1
2
$ apt-get install autossh
$ autossh -M 55555 -NTf -R 公网端口:本地机器IP:本地端口 用户名@公网机器IP

其中 55555 端口监听连接的变化。只要断开就会进行重连,可以随意指定一个未被占用的端口。