一、所需环境

本文的主要目的就是使一台可以连接外网但是不具有公网IP的linux主机可以通过公网IP进行连接
PC1 : 一台可以连接公网但是没有公网IP的linux主机
PC2 :一台具有公网IP的linux服务器,IP : 123.57.14.71
PC1和PC2均需具有ssh服务,并且PC1上应具有autossh
#安装autossh
sudo apt update
sudo apt install autossh

二、配置ssh免密登录(PC1上的操作)

1、生成密钥对

[shanx@ubuntu ~ 01:43 #2]$ sudo bash
[root@ubuntu ~ 01:43 #3]$ ssh-keygen
Generating public/private rsa key pair.
Enter file in which to save the key (/root/.ssh/id_rsa):
Enter passphrase (empty for no passphrase):
Enter same passphrase again:
Your identification has been saved in /root/.ssh/id_rsa.
Your public key has been saved in /root/.ssh/id_rsa.pub.
The key fingerprint is:
SHA256:MJ123XEhj43z0IZ8213pmUVvkDoIwR8ng5Zj6123qMM root@ubuntu
The key's randomart image is:
+---[RSA 2048]----+
|     ..+=so.  ...|
|      .oXW+ . .oo|
|      ooX=** . .=|
|       +.*ooo..o+|
|       .SQo ...+ |
|        o o      |
|       . B o     |
|        EF. .    |
|   M    .A       |
+----[SHA256]-----+
生成的密钥对文件为 :/root/.ssh/id_rsa,/root/.ssh/id_rsa.pub

2、将公钥拷贝到具有公网IP的服务器上

[root@ubuntu ~ 01:45 #5]$ ssh-copy-id -i /root/.ssh/id_rsa.pub root@123.57.14.71
/usr/bin/ssh-copy-id: INFO: Source of key(s) to be installed: "/root/.ssh/id_rsa.pub"
The authenticity of host '123.57.14.71 (123.57.14.71)' can't be established.
ECDSA key fingerprint is SHA256:o2wkGhBKaBCRz7hgBLAh6Et9VvLKV9nIqiXxhmeV1rU.
Are you sure you want to continue connecting (yes/no)? yes
/usr/bin/ssh-copy-id: INFO: attempting to log in with the new key(s), to filter out any that are already installed
/usr/bin/ssh-copy-id: INFO: 1 key(s) remain to be installed -- if you are prompted now it is to install the new keys
root@123.57.14.71's password:Number of key(s) added: 1Now try logging into the machine, with:   "ssh 'root@123.57.14.71'"
and check to make sure that only the key(s) you wanted were added.

3、验证结果

[root@ubuntu ~ 02:34 #7]$ ssh root@123.57.14.71
Last failed login: Sat Jul 18 10:42:20 CST 2020 from 115.171.45.135 on ssh:notty
There were 865 failed login attempts since the last successful login.
Last login: Tue Jul 14 23:15:46 2020 from 115.171.45.135Welcome to Alibaba Cloud Elastic Compute Service !
这样就可以免密登录你的服务器了

如果对免密登录还有疑问可以参考 : ssh免密登录的详细说明

三、autossh的使用(PC1上的操作)

[root@ubuntu ~ 02:56 #9]$ autossh -M 10051 -fCNR 10050:0.0.0.0:22 root@123.57.14.71
[root@ubuntu ~ 02:58 #10]$ ps -aux | grep 10051
root        882  0.0  0.0   4528    76 ?        Ss   01:50   0:00 /usr/lib/autossh/autossh -M 10051 -CNR  10050:0.0.0.0:22 root@123.57.14.71
root        884  0.0  0.0  56784  7288 ?        S    01:50   0:00 /usr/bin/ssh -L 10051:127.0.0.1:10051 -R 10051:127.0.0.1:10052 -CNR 10050:0.0.0.0:22 root@123.57.14.71
root       1976  0.0  0.0  14408  1080 pts/0    R+   02:59   0:00 grep --color=auto 10051
[root@ubuntu ~ 03:00 #11]$
autossh -M 10051 -fCNR 10050:0.0.0.0:22 root@123.57.14.71
autossh的参数 : -M 10051                一个监听端口,ssh服务会超时退出,所以需要一个监听ssh连接状态的端口-fCNR                 f 表示后台运行autossh默认就是后台运行的C 允许压缩数据N 不执行远程指令R 将远程主机(服务器)的某个端口转发到本地端指定机器的指定端口10050:0.0.0.0:22       指定PC2上访问哪个地址和IP时会映射到PC1上,0.0.0.0表示所有IP,本参数的意思就是将PC2上所有访问10050端口ssh连接的映射到PC1的22端口root@123.57.14.71       服务器PC2的用户名和IP

如果执行完命令之后,可以查看到/usr/bin/ssh -L 10051:127.0.0.1:10051 -R 10051:127.0.0.1:10052 -CNR 10050:0.0.0.0:22 root@123.57.14.71 这样的一条进程说明程序启动正常

测试一下,在任意的机器上输入ssh -p 10050 shanxin@123.57.14.71,即可连接到PC1上
接下来只要将这条命令设置成开机自启就可以做到随时随地的连接到PC1上了
[root@ubuntu ~ 03:25 #13]$ ssh -p 10050 shanxin@123.57.14.71
shanx@123.57.14.71's password:
Welcome to Ubuntu 16.04.6 LTS (GNU/Linux 4.15.0-45-generic x86_64)* Documentation:  https://help.ubuntu.com* Management:     https://landscape.canonical.com* Support:        https://ubuntu.com/advantage960 packages can be updated.
0 updates are security updates.New release '18.04.4 LTS' available.
Run 'do-release-upgrade' to upgrade to it.Last login: Sat Jul 18 02:35:29 2020 from 127.0.0.1

四、许久之后的补充

1、反向ssh的本质是端口映射

借用上文中的例子 : autossh -M 10051 -fCNR 10050:0.0.0.0:22 root@123.57.14.71

1.这条命令的实际作用是将123.57.14.71这台服务器的端口映射到运行这条命令的服务器的22端口
2.由上可知,我们还可以将本地的web端口80,8080等映射到公网

举例:autossh -M 10061 -fCNR 10060:0.0.0.0:80 root@123.57.14.71
上面的命令运行成功后,在任意的浏览器打开123.57.14.71:10060都相当于打开本地的127.0.0.1:80

2、ssh-copy-id 这条命令的本质

# 将之前的命令复制出来 : ssh-copy-id -i /root/.ssh/id_rsa.pub root@123.57.14.71
# 关于其中的参数 -i /root/.ssh/id_rsa.pub,先来看一下这个文件里有什么
[root@ubuntu ~ 03:25 #13]$ sudo cat /root/.ssh/id_rsa.pub
[sudo] password for shanx:
ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABAQDe77EhZ3lWkLd3jgCVEiNWXc/NmtBEUh3WybwzOuqZ/bzAPPb38XuZzkotxxp0yTw/8aiO/QFsRJJjsnGI5Yt1sjxWLkaqpIAxIO6hGrMHj/p4Eu+FZtrEQYbc0LFG+C+vOugbCqQ0WXG1wWOzXZBdOgU8pJP/0eAvIyHn7IdVUp+YiIQ2TJyxCb6CIxviAw/utohCIfy0Il6Nvq678mQICp3ql1w8sTfwjUE/7KFApwn81YFZ6oMMiu36dWn2Ws6FKIr1+qJmxEYU4UAlfqsX/6DHxqK+i6WzBF63wsUNy7p/wlNbBjUd23bvs3axaNZKTVz8q1KYQ/X+lhXhYEpZ root@ubuntu
# 具体的查验过程就不叙述了得出的结论是ssh-copy-id这条命令将/root/.ssh/id_rsa.pub文件的内容以追加的形式写入到123.57.14.71的/root/.ssh/authorized_keys文件中
root@VM-0-2-ubuntu:/root/.ssh# cd /root/.ssh/
root@VM-0-2-ubuntu:~/.ssh# cat authorized_keys
ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABAQDe77EhZ3lWkLd3jgCVEiNWXc/NmtBEUh3WybwzOuqZ/bzAPPb38XuZzkotxxp0yTw/8aiO/QFsRJJjsnGI5Yt1sjxWLkaqpIAxIO6hGrMHj/p4Eu+FZtrEQYbc0LFG+C+vOugbCqQ0WXG1wWOzXZBdOgU8pJP/0eAvIyHn7IdVUp+YiIQ2TJyxCb6CIxviAw/utohCIfy0Il6Nvq678mQICp3ql1w8sTfwjUE/7KFApwn81YFZ6oMMiu36dWn2Ws6FKIr1+qJmxEYU4UAlfqsX/6DHxqK+i6WzBF63wsUNy7p/wlNbBjUd23bvs3axaNZKTVz8q1KYQ/X+lhXhYEpZ root@ubuntu

3、关于openwrt的环境的特殊处理

  1. 部分openwrt的系统的ssh客户端使用的是不是openssh,而是dropbear这个程序,这个程序生成的秘钥对与常用linux系统下的openssh是不通用的
  2. 不想写了,找个链接先放上吧 : https://blog.csdn.net/a30037338/article/details/71439954

利用autossh反向代理实现内网穿透相关推荐

  1. 阿里云服务器ECS利用反向代理FRP内网穿透

    阿里云ECS利用反向代理 F#R#P 内@网@穿@透 FRP 服务端搭建 内网PC 客户端搭设(windows版本) 远程连接 内网PC 客户端搭设(linux版本) 远程连接 过程问题 1.Wind ...

  2. python内网穿透 开源_反向代理和内网穿透

    概念 反向代理看上去看深奥,其实不然,只是因为汉语言文化的差异导致它看上去深奥.一般反派感觉都比较厉害和神秘. 要理解反向代理,我们就不得不说一下正向代理. 正向代理 (Forward Proxy) ...

  3. 利用EW代理实现内网穿透

    利用EW代理实现内网穿透 环境: 攻击机:kali ip192.168.32.132 中间机:win7 ip 192.168.32.128 ip2 192.168.1.3 假定为公网vps 内网主机: ...

  4. 使用SSH反向隧道进行内网穿透

    这篇文章主要介绍了如何利用SSH 反向隧道穿透NAT,并演示了如何维持一条稳定的SSH 隧道. 假设有机器A 和B,A 有公网IP,B 位于NAT 之后并无可用的端口转发,现在想由A 主动向B 发起S ...

  5. NetOk(免费反向代理)+访问内网网站

    我们需要使用到的工具软件 NetOk(免费反向代理)( https://netok.link/a/download/) 首先我们需要将工具软件拷贝到需要进行远程调试的电脑上,进行一些简单配置,既可使用 ...

  6. 【内网穿透服务器】利用云服务器+FRP实现内网穿透并远程连接服务器

    应用目的:远程管理或在外网访问内网机器上的服务 这里我们是使用云服务器+FRP实现内网穿透,达到远程连接服务器的目的 准备工作 云服务器 这里我们租用的是腾讯云的服务器,类似于下图的这种,配置选择可以 ...

  7. 利用AutoSSH实现远程管理内网服务器

    文章目录 一.组网说明 二.基本配置 1. Server2的配置步骤 2. Server1的配置步骤 3. 配置验证 4. 在Server2上配置autossh的开机自启动 三.PC连接目标机Serv ...

  8. 利用 Termux 配合 ksweb 进行内网穿透

    前言 之前已经写过一个内网穿透了,但教程比较老了,昨天新发现了个免费的内网穿透,测试了下,配合 Termux 可以完美运行.不过美中不足的是,手机必须运行 Termux 才能顺利进入网站 运行截图 教 ...

  9. ssh 反向代理连接内网服务器并配置开机自启动(解决autossh无法开机自启动)

    Q:现有公网服务器A和内网服务器B,如何通过ssh连接B呢 A: 安装autossh 配置B免密登录A,弄了之后B运行ssh root@123.123.123.123,以便将A加入到B的know_ho ...

最新文章

  1. 管理已“死”,经营为王时代来临
  2. javascript元素跟随鼠标在指定区域运动
  3. PSP DAILY软件功能说明书
  4. JavaScript实现levenshteinDistance字符串编辑距离算法(附完整源码)
  5. 用python画皇冠_手把手教你用 Python 绘制酷炫的桑基图!
  6. 2017-2018-1 20155313 《信息安全系统设计基础》第五周学习总结
  7. systemtap原理及使用
  8. vs2010变的特别卡解决办法
  9. 药大保研计算机要求,药物分析专业保研经验贴
  10. 优化理论11---- Zoutendijk可行方向法、非线性约束情形、ε起作用约束可行方向法、Frank-Wolfe 方法
  11. 修改一行代码,将图像匹配效果提升14%
  12. 宗成庆《统计自然语言处理》 目录的思维导图
  13. 华为USG6000防火墙基础配置简介
  14. 翻译: 欧洲伽利略卫星-全球导航卫星系统GNSS
  15. Ubuntu 的护眼软件 :RedShift
  16. 操作系统 - 王道 - 第五章 I/O
  17. 金仓数据库KingbaseES数据库管理员指南--15.1. 管理视图
  18. 从小就对生意耳濡目染的小伙,长大后创业资产过亿
  19. 【软件介绍】IGV软件的安装和基本介绍
  20. 如何把一台电脑变成服务器

热门文章

  1. 初学编程者必知的五个网站
  2. 【Android开发日记】jsonObject = new JSONObject(info)报错 A JSONObject text must begin with '{' at character
  3. WIFI手机将登陆上海 打国际长途每分钟0.3元
  4. 利用appimage工具对开发好的项目进行打包
  5. [GBase 8s 教程]GBase 8s 运算符/函数
  6. [GBase 8s 教程]GBase 8s UNION 操作符
  7. Linux查看CPU、内存、硬盘、操作系统相关详细信息
  8. Python异常及处理
  9. FLUENT液滴挥发模拟
  10. 初学者如何搭建React开发环境并且创建react项目