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即可。

| 访问量:
Table of Contents