ssh隧道的一些应用
本地端口转发/映射到远程端口
ssh -L [本地监听端口]:[目标服务器地址]:[目标服务器端口] user@sshserver
你的本地应用连接 本地监听端口 $\rightarrow$ 流量通过 SSH 加密 $\rightarrow$ 流量在 SSH服务器 解密 $\rightarrow$ 流量转发到 目标服务器地址 的 目标端口。
可以通过 SSH 安全地访问远程数据库、Web 应用管理界面等。
可用于绕过防火墙,访问那些只允许 SSH 服务器内部访问的服务。
比如: ssh -L 3306:localhost:3306 user@dbserver 这里的意思是连接本地的3306端口就相当于连接到dbserver的3306端口了。这里的localhost指的是dbserver这台机器的本地。
远程端口转发
允许 远程网络 中的用户通过 SSH 服务器 访问 你的本地机器 上的服务。
远程用户连接 SSH服务器监听端口 $\rightarrow$ 流量在 SSH服务器 加密 $\rightarrow$ 流量通过 SSH 加密隧道 $\rightarrow$ 流量在你的本地机器解密 $\rightarrow$ 流量转发到 本地目标地址 的 本地目标端口。
ssh -R [SSH服务器监听端口]:[本地目标地址]:[本地目标端口] user@SSH服务器
比如: 将你本地内网的一个服务(如 Web 服务器 $80$ 端口)暴露给外部网络。允许外部技术人员通过你的 SSH 服务器端口,访问你本地机器上的服务
ssh -R 8080:localhost:80 user@remoteserver
远程用户连接:remoteserver:8080 (该连接实际上指向你本地的 localhost:80)
SSH 服务器通常默认只允许 localhost 访问转发的端口。若要允许外部 IP 访问,需要配置 sshd_config 中的 GatewayPorts yes。
通过跳板机到目的机器
你的目标主机位于一个私有网络(内网)中,你的本地机器无法直接访问。但是,有一台跳板机(Jump Host,通常是堡垒机或位于 DMZ 区的服务器)可以同时访问你的本地机器(接收 SSH 连接)和目标主机。
ssh -J user@jumpserver_address user@destination_address
# 带端口转发的跳板连接
ssh -J user@jump-server -L 8080:localhost:80 user@target-server
![[ssh-tunnel.png]]
动态端口转发
动态转发创建一个socks代理服务器,允许你的所有应用(浏览器,聊天工具等)通过这个代理服务器访问任何目标地址。
ssh -D [本地监听端口] user@ssh_server
本地应用配置使用socks代理,所有流量都发送到本地监听端口,然后流量通过ssh加密传送到ssh服务器,ssh服务器充当socks代理,帮你访问任意目标网站地址。
主要用于将网络流量加密,防止本地ISP的监控,绕过本地网络限制,来访问外部资源。
比如:
ssh -D 1080 user@proxy_server
保持连接,然后在应用中配置socks代理,服务器地址localhost,端口1080即可。