本文描述了怎么通过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反向代理实现的远程协助的更多相关文章

  1. 记一次 用 ssh 反向代理解决的远程操作效率问题

    公司在异地有一个项目,项目在内网有一个linux 集群开发人员通过 xshell 进行操作,但是开发过程中还需要公司开发人员进行远程操作,原来采用的方案是向日葵,需求能实现但是限于网络环境向日葵实在是 ...

  2. 利用ssh反向代理以及autossh实现从外网连接内网服务器

    前言 最近遇到这样一个问题,我在实验室架设了一台服务器,给师弟或者小伙伴练习Linux用,然后平时在实验室这边直接连接是没有问题的,都是内网嘛.但是回到宿舍问题出来了,使用校园网的童鞋还是能连接上,使 ...

  3. ssh反向代理

    文章链接:https://www.cnblogs.com/kwongtai/p/6903420.html 前言 最近遇到这样一个问题,我在实验室架设了一台服务器,给师弟或者小伙伴练习Linux用,然后 ...

  4. 基于Nginx反向代理及负载均衡

    基于Nginx反向代理及负载均衡 参考:http://nginx.org/en/docs/http/ngx_http_proxy_module.html#proxy_pass 只要没有被启用,默认就是 ...

  5. ssh 反向代理和正向代理的文章

    搜索原因是,我希望访问家里内网的机器 技术要点: ssh 反向代理,正向代理 隧道 文章摘自: https://my.oschina.net/leejun2005/blog/94401 https:/ ...

  6. SSH 反向代理

    SSH反向代理 被控制端没有NAT或者没有静态公网IP,把本端一台服务器映射到外网给远端SSH进来,建立SSH反向隧道. 先映射本端机器到外网  nat server 2222to22 protoco ...

  7. .net core 跨平台开发 微服务架构 基于Nginx反向代理 服务集群负载均衡

    1.概述 反向代理(Reverse Proxy)方式是指以代理服务器来接受internet上的连接请求,然后将请求转发给内部网络上的服务器,并将从服务器上得到的结果返回给internet上请求连接的客 ...

  8. frp ssh反向代理配置使用

    本质是一个内网反向代理工具,需要一个vps配合,因为要外网ip. 主页: https://github.com/fatedier/frp 1.服务端(VPS) 可以用下面的一键安装脚本,也可以用主页上 ...

  9. 使用 FRP 反向代理实现 Windows 远程连接

    互联网普及率的日渐攀升与 IPv4 资源的持续减少,现在大部分家庭宽带都不会分配公网 IP ,这使一些网络应用的实现多了些困难,像个人的 NAS 和一些智能家居设备.对于分配公网 IP ,各地运营商的 ...

随机推荐

  1. NSString之Format

    三点用法总结: 类型转换:基本类型到对象类型 需要调用NSString的fotmat方法 NSString  *location = [NSString  stringWithFormat:@&quo ...

  2. vim vimgdb reg 编译安装

    在各种无法忍受下,还是决心自己编译安装一个vim.由于vimgdb for 7.3的patch一直有点问题,因此还是选择了vim7.2做为编译安装的版本.(1)获取vim7.2: http://www ...

  3. (中等) POJ 1703 Find them, Catch them,带权并查集。

    Description The police office in Tadu City decides to say ends to the chaos, as launch actions to ro ...

  4. mysql迁移-----拷贝mysql目录/load data/mysqldump/into outfile

    摘要:本文简单介绍了mysql的三种备份,并解答了有一些实际备份中会遇到的问题.备份恢复有三种(除了用从库做备份之外), 直接拷贝文件,load data 和 mysqldump命令.少量数据使用my ...

  5. ucgui汉字库存放到外部的flash(控件可用)及写外部FLASH小软件

    源:ucgui汉字库存放到外部的flash(控件可用)及写外部FLASH小软件 如何将ucgui的汉字库存放到外部的flash memory(ucgui)(汉字库)(外部flash) ucgui的字库

  6. linux下配置ip地址四种方法(图文)

    (1)Ifconfig命令   第一种使用ifconfig命令配置网卡的ip地址.此命令通常用来零时的测试用,计算机启动后 ip地址的配置将自动失效.具体用法如下.Ipconfig  ethx   i ...

  7. ERP软件数据库覆盖数据恢复成功/重装数据库系统软件,导致同名文件覆盖

    ERP软件数据库覆盖数据恢复成功/重装数据库系统软件,导致同名文件覆盖   [数据恢复故障描述] 上海某酒店ERP软件原来安装在C盘上,用户误操作把软件进行了卸载,发现软件没有了, 但操作之前没有把原 ...

  8. Nodejs之模板ejs

    ejs使用说明及介绍. 1.创建ejs项目 express -e test  //创建模板为ejs的项目,默认为jade. 2.使用 app.js中添加 var ejs = require('ejs' ...

  9. Objective-C中的Hello World

    Objective-C在C语言的基础之上,加入了自己的一些独特的特性,而且在Objective-C中兼容C语言原有的用法.在Objective-C中,实现Hello World和C语言有一定的区别,如 ...

  10. 7.广播和多播,IGMP协议

    1.单播,多播,广播的介绍 1.1.单播(unicast) 单播是说,对特定的主机进行数据传送.例如给某一个主机发送IP数据包.这时候,数据链路层给出的数据头里面是非常具体的目的地址,对于以太网来 说 ...