应用场景:

如果你有Linux云主机(腾讯、华为等),且公司有一台只有内网IP (或动态IP) 的Linux工作机;你计划在家里工作时,通过家里的电脑连接公司的工作机 (且不想使用类似Teamviewer这样的远程控制软件) 的话,本文适合你。

1. 准备

(1) 一台内网机器 A

IP: 172.17.60.247

SSH端口: 22

用户名: root

密码: *

内网配置端口:22 (即配置SSH端口的反向隧道)

(2) 带有公网IP的机器 B

IP: 121.36.163.25

SSH端口: 22

用户名: root

密码: *

公网端口: 22222(重要, 即用B的22222端口连到A的SSH 22端口)

2. 配置SSH密钥

(0)

注意分清A是内网, B是公网

在A主机上生成SSH秘钥, 再和B用SSH建立认证

(1) A的配置(内网主机)

ssh-keygen

配置说明:

直接连按3次enter就可以了, 什么都不用输入.

密钥会自动保存在默认的地方, 方便下一步操作.

(你会获得一长串SHA256:......)

然后利用如下命令将A的SSH秘钥即SHA256:......里面的字符串, 添加到B的authorized_keys里面 (需要输入B主机root账号的密码):

ssh-copy-id root@121.36.163.25

配置说明:

注意换成你自己的IP,执行后会提示输入主机B的密码(要注意这里),

执行完毕之后,我们登录到B,就发现 ~/.ssh/authorized_keys 里面就多了A的SSH公钥了,成功建立SSH认证.

这个步骤主要是完成了从机子A到B的ssh的免密登录,具体可以看~/.ssh/下面的一些密钥更改情况

用root登陆121.36.163.25主机,

ls ~/.ssh/

会有文件

authorized_keys

(2) B的配置(公网主机)

vim /etc/ssh/sshd_config

添加

GatewayPorts yes

这句话的意思是监听端口可以绑定到任意其他IP, 不然只有本机127.0.0.1可以访问

重启一下ssdh服务

sudo service sshd restart

3. A的配置(内网主机)(内网主机安装配置反向隧道软件)

(1)

弄好了上面的, 再回到A, 安装一个autossh,

注意, 这个东西ubuntu安装比较方便

以ubuntu为例, 执行下面命令完成安装

sudo apt-get install autossh

(2) 开启autossh

autossh -M 22002 -NfR 0.0.0.0:22222:localhost:22 root@121.36.163.25

参数说明:

注意最后一个IP 是公网IP

这里,

-M 后面任意填写一个可用端口即可,

-N 代表只建立连接,不打开shell,

-f 代表建立成功后在后台运行,

-R 代表指定端口映射.

这里是将A主机的22端口映射到B主机的22222端口, 这样就完成了配置.

这时我们再访问B主机的22222端口, 就会自动转发到A主机的22端口了, 即可以公网访问了.

特别提醒:

如果是一些供应商的云主机,记得要去安全策略组那里开放22002, 22222端口,不然怎么样都是访问不了的.

4. 连接测试

ssh root@121.36.163.25 -p 22222

输入内网主机a的密码, 这时候你就会惊奇地发现已经打开了内网主机.

另外, 为了方便, 可以考虑将autossh设置为开机启动.

5. 将autossh设置为开机启动(Ubuntu)

(1) 第一步

ln -fs /lib/systemd/system/rc-local.service /etc/systemd/system/rc-local.service

(2) 第二步

sudo echo "
[Install]
WantedBy=multi-user.target
Alias=rc-local.service
" >> /etc/systemd/system/rc-local.service

(3) 第三步

sudo vim /etc/rc.local
#!/bin/bash
autossh -M 22002 -NfR 0.0.0.0:22222:localhost:22 root@121.36.163.25

(4) 第四步

chmod +x /etc/rc.local

原文链接:https://mp.weixin.qq.com/s/oJZXXTTcd2FzksrsRewq5w

Ubuntu实现SSH外网连接内网(反向隧道)的更多相关文章

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

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

  2. 记<<ssh穿透防火墙连接内网的机器(不用路由端口映射)>>

    场景: 在家连接公司的内网服务器. 需求: 不用设置端口映射在家用putty登录公司内网服务器. 条件: 有一台公网服务器做转发,有开放端口的控制权.(公网服务器可以是阿里云ECS, 腾讯云主机这样的 ...

  3. 通过ssh tunnel连接内网ECS和RDS

    通过ssh tunnel连接内网ECS和RDS 这里讲了ssh tunnel的原理.很清晰. 此后又给外网访问内网增加了一种思路.感觉特别棒. 拓宽了思路:

  4. 配置windows路由表,使电脑同时连接内网外网方法

    1.环境一(系统:windows xp,内网.外网不是同一类地址,内网地址固定): 外网:通过笔记本的无线网卡连接: 内网:通过笔记本的本地连接: 第一步,连接网线,配置本地连接地址,注意IP地址不要 ...

  5. [转] 如何设置双网卡同时连接内网外网_bpao_新浪博客

    已剪辑自: http://blog.sina.com.cn/s/blog_5d3e229c0100skwe.html 如何设置双网卡同时连接内网外网 . 通过无线网络连接外网,确保连接成功后开始第二步 ...

  6. 使用ssh从外网访问内网

    一.场景如下: 各个角色的对应关系如下: 角色 描述 APP 个人笔记本,属于内网IP sshd server 公网 VPS ( 映射端口: port 2222 ),拥有公网IP ssh client ...

  7. 【转】配置windows路由表,使电脑同时连接内网外网方法

    1. 公司内部,内网和外网的网关不一样,怎么样让电脑可以同时上内网和外网呢? 来一张不相关的磁盘结构图: ----------------------------------------------- ...

  8. 通过ssh管道连接内网数据库(mysql)

    公网连接内网数据库(如云数据库)时,通常需要白名单:如果不是白名单IP,通常需要一个跳板机(类似代理)来连接内网数据库, 下方以mysql为例(其他数据库基本一致): import pymysql a ...

  9. [笔记] 使用frp从外网访问内网

    之前尝试过otunnel,也记录过使用方法,见[笔记] 使用otunnel从外网访问内网,但是用了几天发现还是不够稳定. 然后尝试frp,发现性能稳定,够用,将过程及配置分享在这里吧. 需求 内网机器 ...

  10. [笔记] 使用otunnel从外网访问内网

    需求 内网机器没有公网IP,但是可以访问外网,现在需要从外网访问内网机器. 举例,在家里机器A访问公司内网机器B. 前提 需要一台有公网IP的服务器S做中转,这样就可以打通AB两端了. A <- ...

随机推荐

  1. Dubbo框架的1个核心设计点

    Java领域要说让我最服气的RPC框架当属Dubbo,原因有许多,但是最吸引我的还是它把远程调用这个事情设计得很有艺术. 1.Dubbo优点较多,我只钟情其一 1.1.优点 业内对于微服务之间调用的框 ...

  2. GPUStack正式发布: 为大模型而生的开源GPU集群管理器

    经过 Seal 研发团队几个月来持续的开发和测试,我们满怀期待及热情地发布新的产品 GPUStack,GPUStack 是一个用于运行 LLM(大型语言模型)的开源 GPU 集群管理器.尽管如今大语言 ...

  3. 系统编程-进程-close-on-exec机制

    我的相关博文: 系统编程-进程-exec系列函数超级详解(带各种实操代码) 一般我们会调用exec执行另一个程序,此时会用全新的程序替换子进程的正文,数据,堆和栈等. 此时保存文件描述符的变量当然也不 ...

  4. ConcurrentLinkedQueue详解(图文并茂)

    前言 ConcurrentLinkedQueue是基于链接节点的无界线程安全队列.此队列按照FIFO(先进先出)原则对元素进行排序.队列的头部是队列中存在时间最长的元素,而队列的尾部则是最近添加的元素 ...

  5. [TK] 矩阵取数游戏<简单版> hzoi-tg-906-2

    本题是一个坐标DP问题 状态转移 首先我们注意到,一个状态只能由两种前置状态得到:取左边的数和取右边的数,因此我们以状态为阶段定义如下: \(f[a][b][c]\) 为状态转移数组,其中 \(a\) ...

  6. DevNow: Search with Lunrjs

    前言 假期真快,转眼国庆假期已经到了最后一天.这次国庆没有出去玩,在北京看了看房子,原先的房子快要到期了,找了个更加通透一点的房子,采光也很好. 闲暇时间准备优化下 DevNow 的搜索组件,经过上一 ...

  7. Serilog文档翻译系列(七) - 应用设置、调试和诊断、开发接收器

    01.应用设置 Serilog 支持在 App.config 和 Web.config 文件中使用简单的 配置语法,以设置最低日志级别.为事件添加额外属性以及控制日志输出. Serilog 主要通过代 ...

  8. gaussian噪声

    高斯噪声 高斯噪声(Gaussian noise)是一种具有正态分布(也称作高斯分布)概率密度函数的噪声.换句话说,高斯噪声的值遵循高斯分布或者它在各个频率分量上的能量具有高斯分布.它被极其普遍地应用 ...

  9. 深入理解Java并发读写锁——ReentrantReadWriteLock

    ReentrantReadWriteLock使用场景 ReentrantReadWriteLock 是 Java 的一种读写锁,它允许多个读线程同时访问,但只允许一个写线程访问(会阻塞所有的读写线程) ...

  10. 基于 KubeSphere 的 AI 平台开发实践

    概述 本文基于 "KubeSphere & Friends 2021 Meetup 北京站" 分享主要内容整理而来,详细内容建议观看视频,本文有一定删减. 作者:胡涛(Da ...