SSH(Secure Shell)不仅是一个远程登录工具,还提供了强大的端口转发(Port Forwarding)功能。
通过 SSH 端口转发,可以在本地和远程主机之间建立加密的隧道,实现安全的数据传输、绕过防火墙限制或访问受限服务。
SSH 端口转发的类型
SSH 支持三种主要的端口转发方式:
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
二、详细说明与使用示例
1. 本地端口转发(Local Port Forwarding)
ssh -L [本地IP:]本地端口:目标主机:目标端口 用户名@SSH服务器
将本地机器上指定端口的流量通过 SSH 隧道发送到目标主机的目标端口。
2. 应用场景:
-
访问远程数据库(如 MySQL、PostgreSQL) -
绕过本地网络限制访问内网服务
假设你想在本地访问远程服务器 dbserver
上运行的 MySQL 数据库(默认端口 3306),可以通过 SSH 跳转服务器 gateway.example.com
实现:
ssh -L 3306:dbserver:3306 [email protected]
mysql -h 127.0.0.1 -P 3306 -u root -p
本地 3306 端口被映射到 dbserver:3306,所有数据通过 gateway.example.com 的 SSH 加密通道传输。
ssh -R [远程IP:]远程端口:目标主机:目标端口 用户名@SSH服务器
将远程服务器上的某个端口监听,并将该端口的流量通过 SSH 隧道转发到本地目标主机。
应用场景:
将本地 Web 服务暴露给公网(如调试本地 API)
内网穿透(让外网访问局域网中的服务)
localhost:8080
,想让远程服务器 remote.example.com
上的用户访问它:ssh -R 8080:localhost:8080 [email protected]
http://localhost:8080
来访问你的本地服务。GatewayPorts yes
)。ssh -D [本地IP:]本地端口 用户名@SSH服务器
创建一个 SOCKS5 代理服务器,客户端可以将任意流量通过这个代理经由 SSH 隧道转发出去,实现类似“翻墙”的效果。
应用场景:
-
浏览器通过 SOCKS 代理访问外部网络 -
安全访问多个不同目标地址的服务
建立一个 SOCKS5 代理服务器在本地 1080 端口:
ssh -D 1080 user@example.com
在浏览器中设置代理为 SOCKS5 127.0.0.1:1080,即可通过远程服务器上网。
三、其他常用参数说明
参数
-N不执行远程命令,仅用于端口转发
-f后台运行 SSH
-g允许远程主机连接本地转发端口(需配合 -L 使用)
-C启用压缩,加快传输速度
-T禁用伪终端分配,适用于自动化脚本
ssh -fN -L 8080:internal-server:80 user@gateway
后台运行并建立本地端口转发,不执行命令。
四、SSH 配置文件启用/禁用端口转发
编辑 /etc/ssh/sshd_config
文件:
AllowTcpForwarding yes/no # 控制是否允许 TCP 转发
GatewayPorts no/yes/clientspecified # 是否允许远程绑定非 localhost 地址
修改后重启 SSH 服务:
sudo systemctl restart sshd
五、实际应用场景汇总
六、总结对比表
七、安全建议
-
避免滥用:不要随意开启远程端口转发,防止被攻击者利用。
-
最小权限原则:只为必要用户启用 AllowTcpForwarding 和 GatewayPorts。
-
日志监控:定期查看 SSH 日志(/var/log/auth.log 或 journalctl)。
-
结合密钥认证:使用 SSH 密钥代替密码,提高安全性。
原文始发于微信公众号(运维星火燎原):SSH端口转发技术详解
- 左青龙
- 微信扫一扫
-
- 右白虎
- 微信扫一扫
-
评论