SSH端口转发(SSH Port Forwarding)是SSH协议提供的一项强大功能,允许通过加密的SSH隧道转发网络流量,在系统运维(SysOps)中有着广泛的应用场景。
ssh -L [本地绑定地址:]本地端口:目标地址:目标端口 用户名@SSH服务器
访问内部服务
ssh -L 8080:internal-web:80 user@bastion-host
通过堡垒机访问内部Web服务,本地访问localhost:8080
即可
数据库安全访问
ssh -L 3306:db-server:3306 user@jump-host
安全连接内部MySQL数据库
多跳转发
ssh -L 8080:target:80 -J user1@jump1,user2@jump2 user3@final-bastion
通过多个跳板机访问最终目标
ssh -R [远程绑定地址:]远程端口:目标地址:目标端口 用户名@SSH服务器
内网穿透
ssh -R 2222:localhost:22 user@public-server
将内网SSH服务暴露到公网服务器的2222端口
临时远程访问
ssh -R 8080:localhost:80 user@cloud-host
将本地开发中的Web服务临时暴露给远程同事查看
反向代理设置
ssh -R 80:localhost:3000 user@proxy-server
将本地应用通过远程服务器80端口对外提供服务
ssh -D [本地绑定地址:]本地端口 用户名@SSH服务器
安全浏览
ssh -D 1080 user@secure-gateway
配置浏览器使用localhost:1080
作为SOCKS代理,所有流量通过SSH加密
绕过网络限制
ssh -D 1080 -p 443 user@vps-host
通过443端口(通常不被封锁)建立加密隧道
多协议支持
ssh -D 1080 -C user@gateway
支持HTTP/HTTPS/FTP等多种协议通过隧道传输
ssh -o ServerAliveInterval=60 -o ServerAliveCountMax=3 -L 3306:db:3306 user@host
autossh -M 0 -f -N -L 3306:db:3306 user@host
~/.ssh/config
示例:
Host *
ControlMaster auto
ControlPath ~/.ssh/control-%r@%h:%p
ControlPersist 4h
ssh -L 8001:localhost:8001 user@k8s-master
kubectl proxy
# 本地访问 http://localhost:8001/api/v1/namespaces/kubernetes-dashboard/services/https:kubernetes-dashboard:/proxy/
ssh -L 5432:private-db.postgres.database.azure.com:5432 user@bastion-host
ssh -R 9000:localhost:9000 dev@staging-server
# 远程团队访问 staging-server:9000 调试本地开发环境
连接被拒绝
AllowTcpForwarding
)性能问题
-C
选项-c aes256-gcm@openssh.com
权限问题
GatewayPorts
设置(远程转发)SSH端口转发是Linux系统运维中的瑞士军刀,合理使用可以构建安全、灵活的网络架构,同时保持操作的简便性。