当前位置: 首页 > news >正文

[折腾]使用SSH服务实现一个socks5代理服务器

其实使用的是ssh的动态转发功能。

ssh -D 12345 -N -T root:remotehost

-D [bind_address:]port 指定监听的端口,会在本地监听该端口,并将请求到该端口流量基于 SOCKS5 协议转发到远程主机上,其中 [bind_address:]可以不填,当不写或者为 * 时表示监听全部地址。示例:-D *:8081,-D 8081,-D 127.0.0.1:8081,-D 192.168.0.1:8081
-N 不执行远程命令,仅仅用于端口转发
-T 不为该命令分配伪终端

ssh 的动态转发会在本地创建一个监听端口,并且将请求到该端口的流量全部转发到远程主机上,从而实现代理的功能,我们可以使用 curl 命令测试代理是否成功:

curl -x socks5://localhost:12345 https://www.csdn.net

通过上面的命令,我们可以通过本地12345代理,将本地请求csdn的流量转发给远程主机,由远程主机帮我们执行请求后将结果返回给我们。

在远程主机上实现一个简单的代理服务器

基于上面的逻辑,我们可以在远程主机创建一个简单的代理服务器:

ssh -D 12345 -N -T root@localhost

这种方式相当于使用 ssh 登录了当前主机,并创建了一个动态转发的接口,我们可以使用 curl 进行测试:

curl -x socks5://localhost:12345 https://www.csdn.net

这样的话我们就可以将当前主机的 13245 端口暴露出去,外部请求就可以将当前主机作为一个代理服务器实现请求的代理了。
当然这种实现的是一个简单的代理服务器,相当于将当前主机完全暴露到了外面,而且没有任何安全认证,如果有需要的话还是使用 squid 这类功能更加强大的代理服务器。

在上面的基础上,我们还可以使用 ssh 的基于远程端口代理的方式将这个端口映射到远端主机:

ssh -R [本地绑定地址:]端口:[远程绑定地址]:远程端口 -N -T root@remotehost

该命令执行后,相当于在远程主机上创建了一个监听端口,并且将请求到该端口的所有流量都转发到了本地的端口,我们只需要将本地的端口指定为刚刚我们创建的动态转发监听端口即可。

ssh -R 12345:localhost:12345 -N -T root@remotehost

参考资料

Linux curl命令详解

搭建一个SOCKS代理服务器

Socks5代理服务器搭建

Linux搭建Socks5代理服务器

彻底搞懂SSH端口转发命令

SSH 端口转发

ssh端口转发的三种方式

ssh-port-forwarding

相关文章:

  • java计算机毕业设计我的大学电子相册源码+系统+数据库+lw文档+mybatis+运行部署
  • 中小型企业应如何选择OA管理系统
  • Kubernetes学习记录之(jenkins slave安装配置)
  • java计算机毕业设计文学阅读平台源码+系统+数据库+lw文档+mybatis+运行部署
  • windows下安装docker
  • 3D格式转换神器HOOPS Exchange使用教程(一):打印组件结构
  • 2021-05-13 Redis面试题 Redis key的过期时间和永久有效分别怎么设置?
  • NGINX源码之:event与epoll
  • 【Python】第十课 魔法方法
  • 有趣的前端项目——一个暴躁萌的大眼仔
  • Docker CentOS8 编译安装 nagios
  • MindSpore实践:神经网络与贝叶斯神经网络
  • mybatis级联查询
  • 数据结构算法之什么是单调栈,如何使用单调栈解题
  • 显卡对应的Compute Capability值
  • Android 控件背景颜色处理
  • Angular 响应式表单 基础例子
  • FastReport在线报表设计器工作原理
  • tensorflow学习笔记3——MNIST应用篇
  • ⭐ Unity 开发bug —— 打包后shader失效或者bug (我这里用Shader做两张图片的合并发现了问题)
  • Work@Alibaba 阿里巴巴的企业应用构建之路
  • 笨办法学C 练习34:动态数组
  • 将回调地狱按在地上摩擦的Promise
  • 蓝海存储开关机注意事项总结
  • 利用阿里云 OSS 搭建私有 Docker 仓库
  • 实现菜单下拉伸展折叠效果demo
  • 吐槽Javascript系列二:数组中的splice和slice方法
  • 微信小程序实战练习(仿五洲到家微信版)
  • 我这样减少了26.5M Java内存!
  • 原生 js 实现移动端 Touch 滑动反弹
  • 你对linux中grep命令知道多少?
  • # 再次尝试 连接失败_无线WiFi无法连接到网络怎么办【解决方法】
  • ###项目技术发展史
  • (4)事件处理——(6)给.ready()回调函数传递一个参数(Passing an argument to the .ready() callback)...
  • (51单片机)第五章-A/D和D/A工作原理-A/D
  • (附源码)SSM环卫人员管理平台 计算机毕设36412
  • (附源码)ssm跨平台教学系统 毕业设计 280843
  • (介绍与使用)物联网NodeMCUESP8266(ESP-12F)连接新版onenet mqtt协议实现上传数据(温湿度)和下发指令(控制LED灯)
  • (篇九)MySQL常用内置函数
  • (一)eclipse Dynamic web project 工程目录以及文件路径问题
  • (转)fock函数详解
  • .bat批处理(四):路径相关%cd%和%~dp0的区别
  • .net core 6 集成 elasticsearch 并 使用分词器
  • .NET 使用 JustAssembly 比较两个不同版本程序集的 API 变化
  • .NET/C# 编译期间能确定的相同字符串,在运行期间是相同的实例
  • .NET/C# 在代码中测量代码执行耗时的建议(比较系统性能计数器和系统时间)
  • .net打印*三角形
  • .Net环境下的缓存技术介绍
  • []新浪博客如何插入代码(其他博客应该也可以)
  • [④ADRV902x]: Digital Filter Configuration(发射端)
  • [Angular 基础] - 数据绑定(databinding)
  • [C# 基础知识系列]专题十六:Linq介绍
  • [c++] 什么是平凡类型,标准布局类型,POD类型,聚合体
  • [Docker]五.Docker中Dockerfile详解
  • [Java][Liferay] File system in liferay