基于ssh反向代理实现的远程协助
本文描述了怎么通过ssh反向代理实现远程协助,并提供了相关代码。
可满足web开启远程协助功能后,维护人员能够通过ssh和http登录客户机器(包括在nat环境下)
- web开启该功能后,ssh才能登录;
- 通过标识能够区分不同的机器;
- 能够穿nat;
操作系统: CentOS 6.5_x64
开发语言: Python
源码地址: https://github.com/mike-zhang/remoteHelper
整体结构如下:

主要成员如下:
客户A
购买公司产品的客户服务器
服务器B
公司公网服务器
技术支持人员C
公司员工电脑
端口代理
通过ssh反向代理实现端口转发,这里描述下思路。
SSH端口代理
HTTP端口代理

密钥管理
RSA密钥管理
密钥用途:客户机器使用RSA key执行ssh反向代理本地端口
私钥管理
私钥产生位置:客户机器
私钥存储位置:客户机器私钥在客户机保存,新生成密钥对时执行覆盖操作。
公钥管理
公钥产生位置:客户机器
公钥存储位置:公网服务器
公钥添加过程如下:
1、 公网服务器收到客户机发来的含RSA公钥的消息;
2、 从消息中取出客户序列号;
3、 验证客户序列号是否合法;
4、 如果序列号合法,将RSA公钥加入authorized_keys文件,并在公钥字符串后面加入超时信息;
公钥删除过程如下:
1、从authorized_keys文件取出公钥;
2、判断公钥是否超时;
3、删除超时的公钥;
DSA密钥管理
密钥用途:
使用此密钥通过跳板机连接到NAT后面的客户机。
私钥管理
私钥产生位置:support机器
私钥存储位置:support机器公钥管理
公钥产生位置:客户机器
公钥存储位置:客户机器
私钥产生过程:
1、获取客户机页面显示的动态密码; 2、以动态密码为seed产生DSA私钥(存储后用于ssh登录客户机);
公钥添加过程如下:
1、随机产生动态密码;
2、以动态密码为seed产生DSA公钥;
3、将产生的DSA公钥加入authorized_keys文件(不能在key字符串前面加入command命令,否则无法执行command),并设置超时时间;
公钥删除过程:
1、从authorized_keys文件取出公钥;
2、判断公钥是否超时;
3、删除超时的公钥;
连接管理
IP地址限制
适用范围:在公网服务器上配置,用于控制support机器ip地址来源。
提供配置项,用于记录允许的IP地址;
新的请求到来时,验证下原地址是否合法,如果不是合法地址,直接断开连接;
SSH连接管理
客户侧ssh连接管理
ssh命令允许在末尾执行command,当command执行完成时,ssh断开。
可借助这个特性在ssh命令的末尾调用python脚本,调用一个python程序,执行sleep操作,python程序退出时ssh连接断开。Support侧ssh连接管理
如果客户侧的ssh断开,support侧的ssh连接也会断开,support侧的ssh连接可以不用过多管理,仅需在客户机的authorized_keys进行连接时长的限制。
其它
1、通过命令执行SSH反向代理时,服务端只能通过127.0.0.1
该问题可以通过服务端配置实现ssh监听0.0.0.0,具体配置如下:
GatewayPorts yes
2、公网服务器remote账号相关命令
useradd remote
chgrp remote /root
su remote
ssh-keygen -t rsa
cd .ssh/
touch authorized_keys
chmod authorized_keys
本文github地址:
https://github.com/mike-zhang/mikeBlogEssays/blob/master/2017/20170205_基于ssh反向代理实现的远程协助.md
欢迎补充
基于ssh反向代理实现的远程协助的更多相关文章
- 记一次 用 ssh 反向代理解决的远程操作效率问题
公司在异地有一个项目,项目在内网有一个linux 集群开发人员通过 xshell 进行操作,但是开发过程中还需要公司开发人员进行远程操作,原来采用的方案是向日葵,需求能实现但是限于网络环境向日葵实在是 ...
- 利用ssh反向代理以及autossh实现从外网连接内网服务器
前言 最近遇到这样一个问题,我在实验室架设了一台服务器,给师弟或者小伙伴练习Linux用,然后平时在实验室这边直接连接是没有问题的,都是内网嘛.但是回到宿舍问题出来了,使用校园网的童鞋还是能连接上,使 ...
- ssh反向代理
文章链接:https://www.cnblogs.com/kwongtai/p/6903420.html 前言 最近遇到这样一个问题,我在实验室架设了一台服务器,给师弟或者小伙伴练习Linux用,然后 ...
- 基于Nginx反向代理及负载均衡
基于Nginx反向代理及负载均衡 参考:http://nginx.org/en/docs/http/ngx_http_proxy_module.html#proxy_pass 只要没有被启用,默认就是 ...
- ssh 反向代理和正向代理的文章
搜索原因是,我希望访问家里内网的机器 技术要点: ssh 反向代理,正向代理 隧道 文章摘自: https://my.oschina.net/leejun2005/blog/94401 https:/ ...
- SSH 反向代理
SSH反向代理 被控制端没有NAT或者没有静态公网IP,把本端一台服务器映射到外网给远端SSH进来,建立SSH反向隧道. 先映射本端机器到外网 nat server 2222to22 protoco ...
- .net core 跨平台开发 微服务架构 基于Nginx反向代理 服务集群负载均衡
1.概述 反向代理(Reverse Proxy)方式是指以代理服务器来接受internet上的连接请求,然后将请求转发给内部网络上的服务器,并将从服务器上得到的结果返回给internet上请求连接的客 ...
- frp ssh反向代理配置使用
本质是一个内网反向代理工具,需要一个vps配合,因为要外网ip. 主页: https://github.com/fatedier/frp 1.服务端(VPS) 可以用下面的一键安装脚本,也可以用主页上 ...
- 使用 FRP 反向代理实现 Windows 远程连接
互联网普及率的日渐攀升与 IPv4 资源的持续减少,现在大部分家庭宽带都不会分配公网 IP ,这使一些网络应用的实现多了些困难,像个人的 NAS 和一些智能家居设备.对于分配公网 IP ,各地运营商的 ...
随机推荐
- 目前所有的ANN神经网络算法大全
http://blog.sina.com.cn/s/blog_98238f850102w7ik.html 目前所有的ANN神经网络算法大全 (2016-01-20 10:34:17) 转载▼ 标签: ...
- 机器学习模型 bias 和 variance 的直观判断
假设我们已经训练得到 一个模型,那么我们怎么直观判断这个 模型的 bias 和 variance? 直观方法: 如果模型的 训练错误 比较大,并且 验证错误 和 训练错误 差不多一样,都比较大,我们就 ...
- JS实现标签页效果(配合css)不同标签下对应不同div
显示页面tab.jsp </ div ></ body > </ html > tab.css ul ,li { margin:0px; padding:0px ...
- CodeForces 622D Optimal Number Permutation
是一个简单构造题. 请观察公式: 绝对值里面的就是 |di-(n-i)|,即di与(n-i)的差值的绝对值. 事实上,对于任何n,我们都可以构造出来每一个i的di与(n-i)的差值为0. 换句话说,就 ...
- CSS3 Media Queries 详解
说起CSS3的新特性,就不得不提到 Media Queries .最近 Max Design 更新的一个泛读列表里,赫然就有关于 Media Queries 的文章.同时位列其中的也有前天我刚刚翻译的 ...
- javascript基础教程学习总结(1)
摘自javascript基础教程 开始: 1.将脚本放在哪里: 1.1 放在html和<html>之间 范例: <!DOCTYPE html PUBLIC "-//W3C/ ...
- kvm下Windows激活方式小计
使用kvm创建widnwos镜像模板,镜像模板默认是已经激活的正版系统,但是使用程序拷贝部署到不同的机器后发现已经激活的系统变成未激活状态,我们需求就是需要拷贝到不同的机器也能显示是正版系统 网上找了 ...
- 解决tomcat运行报错java.lang.UnsatisfiedLinkError: apache-tomcat-7.0.37\bin\tcnative-1.dll:Can load AMD 64
http://www.apache.org/dist/tomcat/tomcat-connectors/native/ 到该地址下下载一个tomcat-native-1.2.2-win32-bin压缩 ...
- xml数据传输
- 那些年我们一起改过的bug
ORA-01861: 文字与格式字符串不匹配 ORA-00936: 缺失表达式 ORA-01810 格式代码出现两次 ORA-01722: 无效数字 无效的列索引
