SSH 远程端口转发

将远程服务器端口的流量转发到本地网络,常用于将本地开发服务暴露到公网

语法

ssh -R [bind_address:]remote_port:target_host:target_port [user@]ssh_server

参数

参数说明示例级别
-R 远程端口转发 ssh -R 8080:localhost:3000 user@host 常用
-N 不执行远程命令 ssh -NR 8080:localhost:3000 user@host 常用
-f 后台运行 ssh -fNR 8080:localhost:3000 user@host 常用
GatewayPorts 服务端配置,允许绑定非 localhost GatewayPorts yes # 在 sshd_config 中 进阶
bind_address 远程绑定地址 ssh -R 0.0.0.0:8080:localhost:3000 user@host 进阶

示例

暴露本地 Web 服务到公网

ssh -NR 8080:localhost:3000 user@public-server
外网访问 public-server:8080 即可看到本地 3000 端口的服务

让同事访问你的本地开发环境

ssh -NR 9000:localhost:5173 user@shared-server
同事访问 shared-server:9000 看到你本地的 Vite 开发服务器

远程调试本地服务

ssh -fNR 5005:localhost:5005 user@test-server
测试服务器可以连接你本地的调试端口

配合 GatewayPorts 绑定所有接口

# 服务端 /etc/ssh/sshd_config 添加:
# GatewayPorts yes
ssh -NR 0.0.0.0:80:localhost:3000 user@server
默认只绑定 127.0.0.1,需要 GatewayPorts 才能绑定公网 IP

常见错误

Warning: remote port forwarding failed for listen port 远程端口被占用或没有权限(<1024 需要 root),换端口或用 sudo
远程转发不可从外网访问 默认只绑定 localhost,需要在 sshd_config 设置 GatewayPorts yes 并重启 sshd

技巧

相关命令