本地端口转发
将本地机器的某个端口请求,通过 SSH 隧道转发到目标服务器可访问的某个 地址:端口
ssh -L [本地IP:]本地端口:目标地址:目标端口 用户名@SSH服务器地址 -p SSH端口
比如,将本地 3306 端口的请求,转发到 SSH 服务器能访问的 127.0.0.1:3306(MySQL)
ssh -L 3306:127.0.0.1:3306 root@192.168.80.187 -p 22
实用参数补充
# 后台运行 + 不执行远程命令 + 自动重连
ssh -fN -L 3306:127.0.0.1:3306 root@192.168.80.187 -p 22
# -f:后台运行
# -N:不执行远程命令(仅转发端口)
# -o ServerAliveInterval=60:每60秒发心跳包,防止隧道断开
ssh -fN -o ServerAliveInterval=60 -L 3306:127.0.0.1:3306 root@192.168.80.187 -p 22
远程端口转发
将 SSH 服务器的某个端口请求,转发到本地机器可访问的某个 地址:端口
ssh -R [远程IP:]远程端口:目标地址:目标端口 用户名@SSH服务器地址 -p SSH端口
示例
# 将 SSH 服务器的 8080 端口请求,转发到本地的 127.0.0.1:8080(内网 Web 服务)
ssh -R 8080:127.0.0.1:8080 root@192.168.80.187
如果需要将端口绑定在远程服务器的0.0.0.0上,需要修改ssh的配置
vim /etc/ssh/sshd_config
# 允许远程端口转发绑定到所有地址(0.0.0.0)
GatewayPorts yes
systemctl restart sshd
动态端口转发
创建一个 SOCKS 代理,所有通过这个代理的请求,都会通过 SSH 隧道转发。
ssh -D [本地IP:]本地端口 用户名@SSH服务器地址 -p SSH端口
示例
# 在本地 1080 端口创建 SOCKS 代理
ssh -D 1080 root@1.2.3.4
curl指定socks
curl -x socks5://127.0.0.1:1080 http://127.0.0.1:5230
浏览器的可以使用Zero Omega设置代理
