1.问题描述:

有时,我们会想在局域网外访问局域网内的机器。这时,我们可以使用SSH的反向连接来实现。

设备A:位于局域网内,可以访问代理服务器B。 假设该设备IP:A.A.A.A,用户名userA

设备B:位于局域网外,作为访问设备A的代理服务器,不可访问A。假设该设备IP:B.B.B.B,用户名userB

设备C:想要访问A的设备,可以访问B,无法直接访问A。假设该设备IP:C.C.C.C,用户名userC

2.目标:设备C可以通过SSH访问局域网内设备C

3.条件:

三台设备都需要包含SSH客户端,A,B设备需要包含SSH服务端。

4.实现步骤:

4.1.在A设备上建立A设备到B设备的反向代理:

ssh -fCNR  <port_b1>:localhost:22 userB@B.B.B.B 

例如:ssh -fCNR  10000:localhost:22 userB@B.B.B.B (此时B设备上已经可以通过ssh -p 10000 userA@localhost连接到设备A)

<port_b1>:建立在B机器上,用来代理设备A机器22端口的端口。

userB@B.B.B.B :B机器的用户名和IP地址。

4.2.在B设备上建立B设备到A设备的正向代理:(这样做的目的是为了实现和外网的通信)

ssh -fCNL  *:<port_b2>:localhost:<port_b1>  userB@localhost

例如:ssh -fCNL  *:10001:localhost:10000 userB@localhost

<port_b2>:用作本地转发的端口,用来和外网通信,并将数据转发到<port_b1>,实现从其他机器可以访问。

*代表可以接受来自任意机器的访问。

4.3.现在C机器上可以通过B机器SSH到A机器

ssh -p<port_b2> userA@B.B.B.B

5.注意事项

5.1.参数介绍

-f 后台运行-C 允许压缩数据-N 不执行任何命令-R 将端口绑定到远程服务器,反向代理-L 将端口绑定到本地客户端,正向代理

5.2.自动连接和防断线脚本

如果你想让连接长期保持,可以写个脚本来保证因为网络原因断线的话可以自动重连。

先说Windows平台,用plink -pw参数可以指定密码,所以只要写个批处理:

:1
plink -pw “password” -D 7070 user@serverip
goto 1

这样应该就可以解决大多数问题造成的断线。

Linux平台ssh默认不支持把密码作为参数,不过有sshpass可以搞定

http://sourceforge.net/projects/sshpass/files/latest/download

下载,解压,编译,把可执行文件拷贝到合适的目录,执行命令格式如下:

sshpass -p "password" ssh -D <port> user@serverip

貌似ubuntu下可以直接apt-get install sshpass

编写脚本autossh.sh,内容如下:

#!/bin/bash
while [ '' == '' ]
do
ssh_d_process_num=`ps aux|grep -E 'ssh \-' |grep -v grep |wc -l`
if [ "$ssh_d_process_num" == "0" ]; then/home/user/sshpass -p "password" ssh -D 7070 user@ServerIP &
fi
sleep 300
done

执行这个脚本就可以了。sleep 300代表300秒查看一次,可以根据需要调整。

5.3.如果设备A重新启动了,则只需要重新配置设备A即可。

linux通过ssh实现反向连接相关推荐

  1. linux自动断开会话,linux – 从SSH会话断开连接是否会导致程序崩溃?

    编辑2016年: 这个Q& A早于systemd v230 debacle.从systemd v230开始,新的默认设置是终止终止登录会话的所有子节点,无论采取了哪些历史上有效的预防措施来防止 ...

  2. 使用ssh正向连接、反向连接、做socks代理的方法

    文章出处:http://dzmailbox.blog.163.com/blog/static/120534385201232642637847/ 最近才发现ssh有多么的强大! 在网上搜了半天,发现大 ...

  3. 用ssh反向连接访问内网主机 ( 实例使用autossh隧道实现mysql的同步 )

    一.准备知识 什么是autossh? 假设有两台主机: A主机为外网,B主机为内网 通常来说外网主机A是无法直接连接到内网主机B的,这时如果要实现A主机通过ssh控制B主机,通常来说有 两种方法: 1 ...

  4. linux内核开启ssh,linux开启ssh服务

    本文概略:1)ubuntu发行版开启ssh.2)centos发行版开启ssh 1.ubuntu发行版安装/开启ssh服务 1.1 安装ssh服务端 sudo apt-get install opens ...

  5. SSH反向连接及Autossh

    SSH反向连接及Autossh http://www.cnblogs.com/eshizhan/archive/2012/07/16/2592902.html SSH反向连接及Autossh 0.接触 ...

  6. [转]SSH反向连接及Autossh

    http://www.cnblogs.com/eshizhan/archive/2012/07/16/2592902.html SSH反向连接及Autossh 0.接触Linux恐怕对SSH再熟悉不过 ...

  7. CentOS/Linux 解决 SSH 连接慢

    现在连接linux服务器一般都是使用SSH远程连接的方式.最近新装了一台服务器,发现telnet时速度很快,ping时一切也正常,但SSH连接的时候却很慢.经过网上资料查询,大致是有以下几种原因: 1 ...

  8. Linux之SSH性能调优,防止连接等待时间过长,连接速度飞起

    SSH服务: 干货:我的虚拟机情况,改完之后 连接速度飞起 修改相应配置: vim /etc/ssh/sshd_conf UseDNS no GSSAPIAuthentication no 保存退出 ...

  9. linux ssh服务,Linux配置SSH服务以便实现远程连接

    Linux用户们一定想要知道该怎么开启SSH服务吧,SSH服务是Linux系统远程连接的重要方式,所以如何配置SHH服务也让很多用户感到纠结.现在小编就帮大家解决这个问题. 配置方法: 查询\安装SS ...

最新文章

  1. 六周第三次课 9.6/9.7 awk
  2. Worktile 技术架构概要
  3. vba sub是什么缩写_这些掌握了,你才敢说自己懂VBA
  4. Python面试题(二)
  5. 炸锅了!Google称2029年人类开始实现永生不死!疾病,衰老,痛苦将彻底消失!?
  6. 【pl/sql番外篇】 存储过程 游标
  7. Orchard商城模块(Commerce)设计与后台部分
  8. 多线程处理同一批数据_C#中多线程的那点事-多线程的代价
  9. C#数据库类(zz)
  10. #pragma pack与sizeof union
  11. ASP.NET编程的十大技巧
  12. 惠普m128fn中文说明书_hp m125m126m127m128使用说明.pdf
  13. 推荐一个图片在线生成链接的网站
  14. cpu型号怎么看服务器,看不懂CPU?学会看CPU只要五分钟
  15. 联合概率 条件概率 边缘概率之间关系
  16. 微信与qq怎么连接到服务器,王者荣耀微信和qq可以一起玩吗 王者荣耀微信和qq互通吗说明...
  17. CVPR2020/2021行人检测重识别等论文,共33篇
  18. 做个表白页面需要掌握哪些英语单词?
  19. python调用jsonrpc接口_微信小程序通过jsonrpc调用python服务端接口
  20. VirtualBox安装CentOS7虚拟机(超级无敌详细)

热门文章

  1. 原生JavaScript实现的简易计算器
  2. 机器视觉为工业自动化打开“新视界”的大门
  3. Linux下的Backlight子系统(一)
  4. Python基础与拾遗2:Python中的字符串与字符串格式化
  5. Linux下Docker及Docker-compose的安装及项目部署实战
  6. Java Spliterator接口总结 Spliterator接口注释翻译和解析中英文对照版
  7. WebJars和wro4j集成
  8. MTK led驱动测试 (adb)
  9. 透过ReentrantLock窥探AQS
  10. 第一章 51单片机开发入门知识介绍