SSH 端口转发是一种高效、安全的方式,可以将本地服务暴露到远程服务器,或者将远程服务映射到本地。
SSH 端口转发的类型
本地端口转发 (
-L)
将远程服务器上的服务映射到本地端口,用于访问远程服务。ssh -L [本地地址:本地端口]:[远程地址:远程端口] user@your-server示例:
ssh -L 8080:localhost:80 user@your-server- 本地
8080端口映射到远程服务器的80端口。 - 本地访问
http://localhost:8080,即访问远程服务器的http://localhost:80。
- 本地
远程端口转发 (
-R)
将本地服务映射到远程服务器的端口,用于将本地服务暴露到外网。ssh -R [远程地址:远程端口]:[本地地址:本地端口] user@your-server示例:
ssh -R 0.0.0.0:8888:localhost:8080 user@your-server- 远程服务器的
8888端口映射到本地的8080端口。 - 外部访问
http://your-server:8888,即可访问本地的http://localhost:8080。
- 远程服务器的
动态端口转发 (
-D)
将本地端口作为 SOCKS 代理,用于动态访问任意远程服务。ssh -D [本地地址:本地端口] user@your-server示例:
ssh -D 127.0.0.1:1080 user@your-server- 本地
127.0.0.1:1080作为 SOCKS 代理,可通过浏览器等工具配置访问外网。
- 本地
配置 /etc/ssh/sshd_config 文件
为了使远程端口转发(-R)正常工作,可能需要修改远程服务器的 SSH 配置文件 /etc/ssh/sshd_config。
关键配置项
允许 TCP 转发
确保以下配置为yes:AllowTcpForwarding yes启用网关端口
使远程端口可以绑定到非本地地址:GatewayPorts yesGatewayPorts no:默认值,只允许绑定到127.0.0.1(本地回环地址)。GatewayPorts yes:允许绑定到所有地址。GatewayPorts clientspecified:根据客户端的-R命令指定绑定地址。
重启 SSH 服务
修改配置后,重启 SSH 服务使其生效:sudo systemctl restart sshd
常用组合参数
1. 保持连接活跃 (-fN)
-f:在连接建立后,SSH 会后台运行。-N:只建立端口转发,不执行远程命令。ssh -fN -L 8080:localhost:80 user@your-server
2. 指定绑定地址
-L本地绑定地址:127.0.0.1仅本地访问,0.0.0.0外部可访问。-R远程绑定地址:同样使用127.0.0.1或0.0.0.0。ssh -R 0.0.0.0:8888:localhost:8080 user@your-server
3. 动态端口转发 + 指定 SOCKS 代理
使用
-D开启动态端口转发,将本地端口作为 SOCKS 代理:ssh -D 127.0.0.1:1080 user@your-server
4. 禁用伪终端
-T:禁用伪终端分配,用于纯端口转发:ssh -T -R 8888:localhost:8080 user@your-server
5. 指定配置文件
-F:使用自定义 SSH 配置文件:ssh -F ~/.ssh/custom_config -L 8080:localhost:80 user@your-server
远程端口转发的安全性考虑
限制绑定地址
如果不需要外网访问,建议远程端口绑定到127.0.0.1,避免暴露服务:ssh -R 127.0.0.1:8888:localhost:8080 user@your-server强制使用 SSH 密钥认证
配置服务器强制使用密钥认证,避免账户被暴力破解:PasswordAuthentication no监控转发端口的使用
在远程服务器上监控端口转发的使用情况:netstat -tlnp
完整案例
1. 将本地服务暴露到远程服务器并开放外网访问
ssh -R 0.0.0.0:8888:localhost:8080 user@your-server- 在远程服务器的
8888端口监听,外部可通过http://your-server:8888访问。
2. 映射远程服务到本地
ssh -L 8080:localhost:80 user@your-server- 将远程服务器的
80端口映射到本地8080,本地访问http://localhost:8080。
3. 配置 SOCKS 代理
ssh -D 127.0.0.1:1080 user@your-server- 本地
127.0.0.1:1080作为 SOCKS 代理,可代理访问外网。
评论 (0)