WordPress极简博客 WordPress极简博客
  • 新鲜事
  • 战疫情
  • UI素材
    • UI素材
    • 电商/节日
    • PPT
      • 节日庆典
      • 工作汇报
      • 商业计划书
    • word
      • 简历竞聘
      • 合同/公文
  • 创客头条
    • 音乐分享
    • 初创文章
    • 极客头条
    • 生活趣事
    • 生活日记
    • 防骗指南
  • 编程教学
    • API日记
    • Linux安全栏目
      • Linux运维安全汇总
      • DDOS攻击防护
      • XSS攻击防护
      • SQL安全防护
    • Python技术栏目
      • Python基础入门
      • Python基础结构
    • WordPress技术栏目
      • WP主题
      • WordPress技术教程
      • RIPRO主题美化
    • WordPress漏洞发布
    • 技术教程汇总
    • 严选源码
  • 专题
  • 基友
  • 隐私
  • 注册
    登录
立即登录
  • 首页
  • 云优化
  • 新疫情
  • 新鲜事
    • 热文
    • 极客
    • 生活
  • 技术篇
    • WP主题
    • 技术教程
    • Python入门
    • Python基础
  • 专题篇
  • 友链君
首页 技术教程(干货) 使用ssh反向连接,轻松连接内网主机

使用ssh反向连接,轻松连接内网主机

夏柔 7月 15, 2020

   最近偶得一服务器,DELL的R730,配置了双路E5-2603v5和8G内存,H330阵列卡,300G的SAS硬盘*3。果断做了RAID5阵列,用life cycle配置完成后直接装了centos7.4(1708),实际体验相当棒,比买的云服务器性能不知道高出了多少倍。这里还要感谢一下DELL的客服妹子,非常专业,有问必答,且主动要求帮忙提供更多的电话支持,本着要多折腾折腾的性子,我十分感动然后拒绝了她,于是走上了折腾之路。 具体过程就不说了,参照客服发来的教程,加上之前PC上装centos的经验,总算是成功装上了。

    由于没有独立IP,且内网错综复杂,从服务器到公网出口网关中间跳了4层路由,想把服务器通过端口映射映射到公网去的想法基本是凉了,所以准备用这台服务器做程序测试使用,但如果想通过公网SSH连接这台服务器,正常情况下是不可能的。但是LINUX的SSH有强大的反向连接功能,完美的解决了这个问题。

SSH反向连接原理:

  • 1、什么是反向连接?
  • 反向连接是指主机A(受控端)主动连接主机B(控制端),在主机A和主机B之间建立一个远程连接,通过这个连
  • 接主机B可以主动的向主机A发送一些请求。
  • 2、为什么需要主机A主动去连接主机B呢?
  • 这是因为主机A在局域网内,如果没有对主机A进行端口映射,对于主机B来说主机A是不可见的,如果在主机B这
  • 边向主机A发送连接请求,这个请求是不可达的。而主机B有自己独立的IP,对于主机A来说是可见的,可以直接向
  • 主机B请求连接。
  • 3、SSH反向连接的过程
  • 方法就是主机A主动去连接主机B,主机B响应主机A的连接请求,它们之间就建立了一个远程连接。然后主机B在
  • 本地再创建一个本地连接,重定向到主机A和主机B刚才建立的远程连接上,之后对这个本地连接的操作都会反馈到
  • 远程连接上去。整个过程类似于文件的DUP,这就在主机A和主机B之间建立了连接通道,此时对于主机B来说,主
  • 机A已经是可见了。
  • 连接流程如下:
  • 3.1、主机A ssh客户端向主机B sshd服务端发送请求,建立远程连接。
  • 3.2、主机B sshd服务端创建本地连接很远程连接的映射(反向连接通道)。
  • 3.3、主机B ssh客户端向主机B sshd服务端的连接通道发送请求, 建立主机B ssh和主机A sshd的连接。
  • 完成连接后,主机A对于主机B可见的形式就是存在于主机B的那个本地连接。
  • 4、为什么需要在主机B对远程连接映射一个本地连接?
  • 反向连接就是CS架构,不过是受控端主动向控制端请求连接,让它们之间的连接建立。传统的CS方式是可以解决
  • 主机A和主机B之间的连接问题,但是那样主机A和主机B的连接方式并不灵活,两者之间能做的事情,只能是CS之际
  • 协议规定的事情。在主机B上建立了主机A的连接映射后, 对于主机B来说主机A已经不是局域网内那台不可见的主
  • 机,主机A已经是存在主机B的一台可见主机,这样就消除了局域网和广域网的阻碍。 主机A和主机B之间建立的那
  • 个远程连接就是主机A和主机B的通道-“网线”。

        简单的来说,就是准备一台外网主机,然后内网主机主动跟外网主机建立一条连接,然后在外网主机上将内网主机的端口映射到本地的其他端口,就可以实现访问内网主机了。好比B给A写过一封信,A就知道了B的地址,那么A就可以一直给B写信寄到这个地址去了。

下面来说一下怎么实现SSH反向连接。

准备工具:一台独立IP的云服务器,一台内网主机。操作环境为centos7。下文独立IP云服务器称之为A,内网主机称之为B。

一、配置两台主机互相信任

“配置主机互相信任”两台主机之间通过秘钥连接,无需输入密码,这样两台主机之间互相登录会比较方便。

curl -o /etc/yum.repos.d/CentOS-Base.repo http://mirrors.aliyun.com/repo/Centos-7.repo
yum makecache
yum -y update

2.在B(内网服务器)上生成公钥并传送到A:

ssh-keygen
接下来一路回车直到出现如下面字样:
+--[ RSA 2048]----+
|     . .+.  o .  |
|    . .+ = . + . |
|     .+ = o .  ..|
|      .o o    . .|
|     .  S .  E   |
|      ..o  .     |
|       o .o      |
|       ... .     |
|      ...        |
+-----------------+
继续操作
cat /root/.ssh/id_rsa.pub >> /root/.ssh/authorized_keys
chmod 700 ~/.ssh
chmod 600 ~/.ssh/authorized_keys
rsync -avz /root/.ssh/authorized_keys root@A地址:/root/.ssh/authorized_keys
选yes,然后输入密码即完成

3.在A(云服务器)上生成公钥并传送到B:

ssh-keygen
接下来一路回车直到出现如下面字样:
+--[ RSA 2048]----+
|     . .+.  o .  |
|    . .+ = . + . |
|     .+ = o .  ..|
|      .o o    . .|
|     .  S .  E   |
|      ..o  .     |
|       o .o      |
|       ... .     |
|      ...        |
+-----------------+
继续操作
cat /root/.ssh/id_rsa.pub >> /root/.ssh/authorized_keys
切换到B
scp root@A地址:/root/.ssh/authorized_keys /root/.ssh/authorized_keys
选yes,然后输入密码即完成

然后试一下,从ssh到A是否需要密码,如果不需要则成功。

二、建立B到A的反向连接隧道

在B(内网服务器)上操作

ssh -NfR 1000:localhost:22 root@A地址 -p 22

参数释义:

-f 后台执行ssh指令
-C 允许压缩数据
-N 不执行远程指令
-R 将远程主机(服务器)的某个端口转发到本地端指定机器的指定端口
-L 将本地机(客户机)的某个端口转发到远端指定机器的指定端口
-p 指定远程主机的端口

这样我们就把内网服务器A的ssh端口22,通过代理隧道映射到了云服务器A的1000端口上,在A上执行:

ss -ant |grep 1000

看到如下结果,表示成功:

LISTEN  0  128    127.0.0.1:1000      :

三、展现奇迹的时刻

在A上执行:

ssh root@localhost -p 1000

成功登陆了内网服务器!

四、优化连接稳定性

因为这样的ssh连接隧道不是很稳定,要是崩溃了那还得用内网服务器B重新连接一次A,非常麻烦。为了方便远程管理,我们需要更稳定的隧道连接,而autossh就完美解决了这个问题。

1.安装autossh:

yum -y install epel-release
yum -y install autossh

2.然后我们执行autossh建立一条稳定的隧道连接:

autossh -M 1001 -NfR 1000:localhost:22 root@A地址 -p 22

M:本机监听端口,监听ssh隧道是否正常,如果断了就重连。

3.配置开机启动:

vim /etc/rc.local
加入如下内容
autossh -M 1001 -NfR 1000:localhost:22 root@A地址 -p 22
内容结束
chmod +x /etc/rc.d/rc.local

接下来可以随时随地通过A连接到内网B主机了。

#linux#ssh#sshd#ssh反向连接内网主机#主机#公网#内网#出口网管#服务器#独立IP
0
J2dcg1.png
猜你喜欢
  • 主机盾公益免费主机测评
  • Nginx添加跨域限制规则
  • 使用测速脚本对国内Linux服务器进行测速
  • 收到许多赞助,感谢支持
  • API服务器迁移升级
  • 免费服务器限时领
  • 域名爆破之自动化信息收集脚本
  • 利用免费接口实现国家开放大学刷网课脚本
  • RiProV2定制导航条
  • 判断是否在微信浏览器打开
12 2月, 2023
ChatGPT接口上线第二天调用数据
夏柔
站长
夏山如碧 - 怀柔天下
1725
文章
25
评论
58145K
获赞
版权声明

文章采用创作共用版权 CC BY-NC-ND/2.5/CN 许可协议,与本站观点无关。

如果您认为本文侵犯了您的版权信息,请与我们联系修正或删除。
投诉邮箱wpsite@aliyun.com

栏目推荐
Python基础入门33
WordPress技术教程267
前沿技术情报所22
城市创新——新消费11
最近有哪些不可错过的热文23
程序员的养生之道0
节
春
  • 新鲜事
  • 疫情实况
  • UI素材
  • 技术教程
  • 音乐分享
  • 专题
  • 友情
  • 隐私
  • 云优化
Copyright © 2019-2025 WordPress极简博客. Designed by 夏柔. 辽公网安备21010502000474号 辽ICP备19017037号-2