🔥码云GVP开源项目 12k star Uniapp+ElementUI 功能强大 支持多语言、二开方便! 广告
[TOC] ## 端口转发 SSH 除了登录服务器,还有一大用途,就是作为加密通信的中介,充当两台服务器之间的通信加密跳板,使得原本不加密的通信变成加密通信 这个功能称为端口转发(port forwarding),又称 SSH 隧道(tunnel) <br/> 端口转发有两个主要作用: 1. 将不加密的数据放在 SSH 安全连接里面传输,使得原本不安全的网络服务增加了安全性,比如通过端口转发访问 Telnet、FTP 等明文服务,数据传输就都会加密。 2. 作为数据通信的加密跳板,绕过网络防火墙 端口转发有三种使用方法:动态转发,本地转发,远程转发 ## 三种使用方法 ### 动态转发 动态转发指的是,本机与 SSH 服务器之间创建了一个加密连接,然后本机内部针对某个端口的通信,都通过这个加密连接转发 场景: - 访问所有外部网站,都通过 SSH 转发 - 可用于代理上网 语法 ``` ssh -D local-port tunnel-host -N tunnel-host 是 SSH 服务器 local-port 是本地端口 -D 表示动态转发 -N 表示只进行端口转发,不登录远程 Shell ``` 如果经常使用动态转发,可以将设置写入 SSH 客户端的用户个人配置文件。 ``` DynamicForward tunnel-host:local-port ``` #### 实例:VPN 假设: - 你的PC 不能自由联网 - 但你的PC 可以访问机器B - 机器B 可以自由联网 ``` ssh -D 8080 root@B机器的IP ``` 测试 ``` curl -x socks5://127.0.0.1:8080 http://www.example.com ``` 或者在浏览器的代理插件中设置socks5代理 可通过"xshell->属性->连接->SSH->隧道->SOCKS4/5"连接 ### 本地转发 SSH 服务器作为中介的跳板机,建立本地计算机与**特定目标**网站之间的加密连接 语法 ``` ssh -L local-port:target-host:target-port [-L ...] tunnel-host -L 参数表示本地转发(L可以使用多个 local-port 本地端口 target-host 你想要访问的目标服务器 target-port 目标服务器的端口 tunnel-host SSH 跳板机 ``` 如果经常使用本地转发,可以将设置写入 SSH 客户端的用户个人配置文件。 ``` Host test.example.com LocalForward client-IP:client-port server-IP:server-port ``` #### 实例:跳板机 ``` ssh -L 2121:192.168.0.91:8000 -L 443:192.168.0.91:443 root@192.168.0.126 -N ``` 0.91是要访问的机器,0.126是跳板机,通过访问`http://127.0.0.1:2121`既可以访问0.91的8000端口 > 本地端口转发采用 HTTP 协议,不用转成 SOCKS5 协议 ### 远程转发 本地计算机在外网,SSH 跳板机和目标服务器都在内网,而且本地计算机无法访问内网之中的 SSH 跳板机,但是 SSH 跳板机可以访问本机计算机 语法 ``` ssh -R local-port:target-host:target-port local -N -R 表示远程端口转发 local-port 本地计算机的端口 target-host 目标服务器 target-port 目标端口 local 本地计算机(本机也需要安装 sshd) ``` > SSH 跳板机执行,从跳板机去连接本地计算机,本地计算机才可以访问目标机器 如果经常执行远程端口转发,可以将设置写入 SSH 客户端的用户个人配置文件。 ``` Host test.example.com RemoteForward local-IP:local-port target-ip:target-port ``` #### 实例 在跳板机执行 ``` ssh -R 2121:www.example.com:80 root@192.168.0.130 -N ``` 0.130为本地机器,跳板机主动连接本机后,本机才可以通过访问`curl http://localhost:2121`访问www.examlpe.com:80