一、SSH简介
SSH(Secure Shell)是一种常用的加密网络协议,用于远程登录和管理服务器。通过将SSH与代理功能结合,可以实现基于SSH的代理服务,其中最常用的三种代理模式是正向代理、反向代理和SOCKS代理。
二、SSH代理
1、正向代理
正向代理是指位于客户端和目标服务器之间的代理服务器,用于转发客户端发出的请求。正向代理需要客户端配置特定的代理设置,将请求发送到代理服务器,由代理服务器代替客户端向目标服务器发起请求。通过正向代理,可以实现流量过滤、内容过滤、访问控制等功能。需要注意的是,正向代理可能会对网络性能产生一定的影响,因为需要经过额外的代理服务器转发请求。
2、反向代理
反向代理是指位于目标服务器和客户端之间的代理服务器,用于接收客户端的请求并转发给目标服务器。反向代理通常配置在目标服务器端,可以隐藏真实的目标服务器地址,提供负载均衡、缓存、SSL加密等功能。与正向代理不同,客户端不需要进行特殊的代理设置,所有的请求都会被代理服务器接收并转发给目标服务器。常见的Web反向代理有Nginx、Apache等。
3、SOCKS代理
SOCKS(Secure Sockets)是一种网络协议,用于在网络层上对数据进行加密和解密。SOCKS代理是指通过SOCKS协议实现的网络代理服务。与正向代理和反向代理不同,SOCKS代理不需要在客户端或服务器端进行特殊配置,它直接在传输层上对数据包进行加密和解密。因此,SOCKS代理通常用于更通用的场景,例如通过VPN或Tor网络进行匿名访问。
在实际应用中,选择哪种SSH代理模式取决于具体的需求和场景。正向代理适用于需要对流量进行过滤和控制的场景;反向代理适用于需要隐藏真实服务器地址或提供负载均衡的场景;而SOCKS代理适用于需要实现匿名访问或加密传输的场景。
4、正向代理配置
用法1:本地222端口映射到Node-A的22
# 在Node-A启动一个222端口,映射到Node-B的22端口
[root@Node-A ~]# ssh -L 0.0.0.0:222:Node-B:22 root@Node-B
# 访问Node-A的222端口相当于访问Node-B的22端口(类似iptables的port-forwarding)
用法2:本地端口通过跳板映射到其他机器
# Node-A上启动2222端口,通过Node-B转发到Node-C的22端口
[root@Node-A ~]# ssh -L 0.0.0.0:2222:Node-C:22 root@Node-B
# 访问Node-A的2222端口相当于访问Node-B后转发Node-C的22端口
两种用法的区别:
第一种用法本地到Node-A的数据是明文的。
第二种用法本地就是Node-A,访问本地的2222,数据被ssh加密传输给Node-B又转发给Node-C的22。
5、反向代理配置
# Node-A将自己可以访问的Node-B:22暴露给外网服务器Node-C:2222
[root@Node-A ~]# ssh -R Node-C:2222:Node-B:22 root@Node-C
连接Node-C:2222就相当于连接Node-B:PortB。使用时需修改Node-C的 /etc/ssh/sshd_config,添加:GatewayPorts yes
[root@Node-C ~]# sed -i '/GatewayPorts/s/no/yes/' /etc/ssh/sshd_config
[root@Node-C ~]# systemctl restart sshd
6、SOCKS代理配置
[root@localhost ~]# ssh -D Node-A:9999 Node-B
[root@Node-A ~]# ALL_PROXY=socks5://Node-A:9999 git clone https://github.com/EbookFoundation/free-programming-books.git
若文章图片、下载链接等信息出错,请在评论区留言反馈,博主将第一时间更新!如本文“对您有用”,欢迎随意打赏,谢谢!


评论