SSH 远程端口转发

今天想调试下新版本服务端支付宝支付确认消息的处理流程, 但是因为本机没有公网 IP, 所以想到利用远程服务器做端口转发. 于是执行下面的命令:

ssh -R 8080:localhost:8080 <remote>

然后在浏览器里访问 <remote>:8080, 提示连接被拒绝. 于是登录到远程服务器执行:

curl localhost:8080

发现访问正常, 所以连接被拒绝应该是因为 ssh 只绑定了本地的网口. 于是修改了下 ssh 的命令:

ssh -R 0.0.0.0:8080:localhost:8080 <remote>

测试了下发现还是拒绝. 到网上搜了好久才找到答案, 原来 ssh 默认只转发发往本地网口的请求. 要转发所有请求需要将 GatewayPorts 设置成 yes (在 /etc/ssh/sshd_config 中设置)

其实这问题之前遇到过, 也搜了好久, 所以还是要记下来才行!

How to make ssh tunnel open to public?