Ubuntu使用内网穿透实现外网ssh远程登录

2023-11-02

Ubuntu使用内网穿透实现外网ssh远程登录

想要远程Ubuntu可以使用ssh网络协议进行远程登录

那什么时ssh呢?

SSH 为 Secure Shell的缩写,由 IETF 的网络小组(Network Working Group)所制定;SSH 为建立在应用层基础上的安全协议。SSH 是较可靠,专为远程登录会话和其他网络服务提供安全性的协议。利用 SSH 协议可以有效防止远程管理过程中的信息泄露问题。SSH最初是UNIX系统上的一个程序,后来又迅速扩展到其他操作平台。SSH在正确使用时可弥补网络中的漏洞。SSH客户端适用于多种平台。几乎所有UNIX平台—包括HP-UX、Linux、AIX、Solaris、Digital、UNIX、Irix,以及其他平台,都可运行SSH。

简单来说,ssh就是一种网络协议,用于计算机之间的加密登录

ssh功能

传统的网络服务程序,如:ftp、pop和telnet在本质上都是不安全的,因为它们在网络上用明文传送口令和数据,别有用心的人非常容易就可以截获这些口令和数据。而且,这些服务程序的安全验证方式也是有其弱点的, 就是很容易受到“中间人”(man-in-the-middle)这种方式的攻击。所谓“中间人”的攻击方式, 就是“中间人”冒充真正的服务器接收你传给服>务器的数据,然后再冒充你把数传给真正的服务器。服务器和你之间的数据传送被“中间>人”一转手做了手脚之后,就会出现很严重的问题。通过使用SSH,你可以把所有传输的数据进行加密,这样"中间人"这种攻击方式就不可能实现了,而且也能够防止DNS欺骗和IP欺骗。使用SSH,还有一个额外的好处就是传输的数据是经过压缩的,所以可以加快传输的速度。SSH有很多功能,它既可以代替Telnet,又可以为FTP、PoP、甚至为PPP提供一个安全的"通道"

ssh登录

从客户端来看,SSH提供两种级别的安全验证。
第一种级别(基于口令的安全验证)
只要你知道自己帐号和口令,就可以登录到远程主机。所有传输的数据都会被加密,但是不能保证你正在连接的服务器就是你想连接的服务器。可能会有别的服务器在冒充真正的服务器,也就是受到“中间人”这种方式的攻击。

ssh user@IP

如果需要调用图形界面程序可以使用 -X 选项

ssh -X user@IP

如果客户机的用户名和服务器的用户名想要,登录的时候可以省略用户名

ssh IP

另外,也是很主要的一点,ssh服务默认的是22端口,如果在登录的时候不指定端口号默认的就是22端口,如果端口改动,需要加上参数**-p**指定

ssh -p port user@IP

第二种级别(基于密匙的安全验证)
需要依靠密匙,也就是你必须为自己创建一对密匙,并把公用密匙放在需要访问的服务器上。如果你要连接到SSH服务器上,客户端软件就会向服务器发出请求,请求用你的密匙进行>安全验证。服务器收到请求之后,先在该服务器上你的主目录下寻找你的公用密匙,然后把它和你发送过来的公用密匙进行比较。如果两个密匙一致,服务器就用公用密匙加密“质询”(challenge)并把它发送给客户端软件。客户端软件收到“质询”之后就可以用你的私人密>匙解密再把它发送给服务器。
用这种方式,你必须知道自己密匙的口令。但是,与第一种级别相比,第二种级别不需要在网络上传送口令。
第二种级别不仅加密所有传送的数据,而且“中间人”这种攻击方式也是不可能的(因为他没有你的私人密匙)。但是整个登录的过程可能需要10秒

使用ssh-keygen命令生成秘钥对

ssh-keygen -t 加密算法

最后跟的时加密算法类型,就是选择那种类型加密

ssh-keygen -t rsa

这种意思就是选择rsa类型加密算法

将公钥复制到主机中

ssh-copy-id user@IP

这样再次登录的时候就不用输入密码了

Ubuntu的ssh远程

Ubuntu默认时带有ssh-client的,就是本身就是一个客户端,直接可以远程登录别的宿主机,但是没有ssh-server的,就是不能作为一个服务器存在,如果不确定自己机器上是否安装了,可以使用以下命令查看

dpkg -l | grep ssh

在这里插入图片描述

安装服务器端和客户端的命令,视情况安装,如果只是控制别的电脑只需要客户端,如果需要开放 ssh服务就需要安装服务器端]

安装客户端(默认是带有客户端的,一般不需要安装)

 sudo apt-get install openssh-client

安装服务器端

sudo apt-install openssh-server

启动ssh-server服务,该服务在/etc/init.d/ssh下,直接启动就可以

sudo /etc/init.d/ssh start

查看服务是否在运行

ps -ef | grep ssh

在这里插入图片描述

安装之后就可以去实现远程其他主机了,在第一次远程主机的时候,会提示你确定主机的真实性,选择yes进入,输入密码就会进入到宿主机的目录下

在这里插入图片描述

外网访问内网

上面这种方法ssh登录只能在局域网内进行,外网时访问不了的,如果想要实现外网访问内网就需要通过内网穿透技术

内网穿透的原理

内网穿透是我们在进行网络连接时的一种术语,也叫做NAT穿透,即在计算机是局域网内的时候,外网与内网的计算机的节点进行连接时所需要的连接通信,有时候就会出现内网穿透不支的情况。内网穿透的功能就是,当我们在端口映射时设置时,内网穿透起到了地址转换的功能,也就是把公网的地址进行翻译,转成为一种私有的地址,然后再采用路由的方式ADSL的宽带路由器,具有一个动态或者是固定的公网IP,最后ADSL直接在交换机上,这样所有的电脑都可以共享上网。内网穿透除了可以实现内网之间机器的网络通信功通之外,还可以解决UDP中出现的数据传输不稳定问题。

说白了,内网穿透就是将你的内网想法设法映射为一个公网IP,因为公网IP时唯一的,实现外网能够访问你主机的应用,那什么是公网IP和私网IP呢?

公网IP和私网IP

1、公有IP指以公网连接Internet上的非保留地址。私有IP是在本地局域网上的IP。

2、公有IP由InterNIC负责。这些IP地址分配给注册并向InterNIC提出申请的组织机构。通过直接访问互联网。私有IP随着私有IP网络的发展,为节省可分配的注册IP地址,有一组IP地址被拿出来专门用于私有IP网络。

3、优势不同:公有IP是公共网络中的计算机和Internet上的其他计算机可以随意地相互访问。私有IP在公网上无法识别,内部IP地址必须通过NAT转换成公网上可用的IP地址,才能实现内部IP地址与外部公网的通信。

4、公网ip具有世界范围的唯一性,而内网ip只在局域网内部具有唯一性。

5、私网ip只在局域网内有效,私网ip可以有好多想用的,比如在A局域网内有192.168.3.1,在B局域网内也可以有192168.3.1

内网穿透可以通过第三方的端口来实现,内网穿透的工具也有很多,比如花生壳,nat123,NATAPP等等,这里使用的时花生壳实现内网穿透

花生壳内网穿透

去官网下载:https://hsk.oray.com/

下载后安装.deb,.deb类型是linux下可执行的文件,实在不行,你可以类比为win下的exe

sudo dpkg -i file.deb

不使用命令行安装的话,在ubuntu下右击可以直接可视化安装

安装成功后在终端输入phddns status可以直接查看状态,phddns后接很多参数,在命令行中可以查看到

在这里插入图片描述

如果要执行start或restart等命令,需要在root管理权限

登录到官网控制台,新建应用,映射的是本机的22端口,在选择的时候可以选择http、ssh、tcp,看你需要什么类型就选择什么类型,花生壳就会自动给你分配外网域名和外网端口

在这里插入图片描述

成功之后就可以实现外网下ssh远程登录了

注意一点,这里做完内网穿透后,ssh远程时候需要带上port

ssh -p port user@外网IP

一下的步骤就和上述的一样了,第一次登录会提示你是否确定主机真实性,选择yes之后输入密码,就会远程到宿主机上
在这里插入图片描述

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Ubuntu使用内网穿透实现外网ssh远程登录 的相关文章

  • awk 子串单个字符

    这是columns txt aaa bbb 3 ccc ddd 2 eee fff 1 3 3 g 3 hhh i jjj 3 kkk ll 3 mm nn oo 3 我可以找到第二列以 b 开头的行 awk if substr 2 1 1
  • 是否可以在Linux上将C转换为asm而不链接libc?

    测试平台为Linux 32位 但也欢迎 Windows 32 位上的某些解决方案 这是一个c代码片段 int a 0 printf d n a 如果我使用 gcc 生成汇编代码 gcc S test c 然后我会得到 movl 0 28 e
  • 强制卸载 NFS 安装目录 [关闭]

    Closed 这个问题不符合堆栈溢出指南 help closed questions 目前不接受答案 Locked 这个问题及其答案是locked help locked posts因为这个问题是题外话 但却具有历史意义 目前不接受新的答案
  • GLIBCXX_3.4.26 未找到在 BeagleBone 上运行交叉编译的程序

    我有以下程序 include
  • 应用程序无缘无故地被杀死。怀疑 BSS 高。如何调试呢?

    我已经在CentOs6 6中成功运行我的应用程序 最近 硬件 主板和内存 更新了 我的应用程序现在毫无理由地被杀死 root localhost PktBlaster PktBlaster Killed 文件和 ldd 输出 root lo
  • 如何根据 HTTP 请求使用 Python 和 Flask 执行 shell 命令并流输出?

    下列的这个帖子 https stackoverflow com questions 15092961 how to continuously display python output in a webpage 我能够tail f网页的日志
  • 如何在 shell 脚本中并行运行多个实例以提高时间效率[重复]

    这个问题在这里已经有答案了 我正在使用 shell 脚本 它读取 16000 行的输入文件 运行该脚本需要8个多小时 我需要减少它 所以我将其划分为 8 个实例并读取数据 其中我使用 for 循环迭代 8 个文件 并在其中使用 while
  • Netbeans 和 Git,.obj 文件被忽略

    我正在开发一个涉及 obj 文件的小型 git 项目 当我查看 项目选项卡 时 我发现它们被忽略了 但如果我查看我的 gitignore 我无法理解为什么 DepthPeeling nbproject private DepthPeelin
  • apt-get 无法在 ubuntu dockerfile 中工作

    我对 docker 相当陌生 正在尝试通过编写自己的镜像来学习 并且目前正在阅读 Docker 的实际操作 ISBN 1633430235 在我自己的代码和书中的示例 第 146 页 中 我想通过 dockerfile 安装 git My
  • 为什么内核需要虚拟寻址?

    在Linux中 每个进程都有其虚拟地址空间 例如 32位系统为4GB 其中3GB为进程保留 1GB为内核保留 这种虚拟寻址机制有助于隔离每个进程的地址空间 对于流程来说这是可以理解的 因为有很多流程 但既然我们只有 1 个内核 那么为什么我
  • 无法从 jenkins 作为后台进程运行 nohup 命令

    更新 根据下面的讨论 我编辑了我的答案以获得更准确的描述 我正在尝试从詹金斯运行 nohup 命令 完整的命令是 nohup java jar home jar server process 0 35 jar prod gt gt var
  • chown:不允许操作

    我有问题 我需要通过 php 脚本为系统中的不同用户设置文件所有者权限 所以我通过以下命令执行此操作 其中 1002 是系统的用户 ID file put contents filename content system chown 100
  • 如何在 macOS 上将 Git 升级到最新版本?

    我刚刚购买了一台装有 OS X Lion 的新 Mac 我在终端中检查了默认安装的 git 版本 我得到了答案 git version gt git version 1 7 5 4 我想将 git 升级到最新版本 1 7 8 3 因此我下载
  • 如何克隆特定的 Git 标签

    From git clone 1 手册页 http git scm com docs git clone branch还可以在结果存储库中的该提交处获取标签并分离 HEAD 我试过 git clone branch
  • 如何使用 AWS Lambda 安装 Git?

    我在代码提交存储库中有代码 我正在编写一个 lambda 函数来为代码提交存储库的每个签入 事件 构建代码 我无法安装 git 因此无法克隆存储库 我该怎么办呢 正如其他人提到的 在 lambda 上安装 git 要么非常困难 要么完全不可
  • fopen 不返回

    我在 C 程序中使用 fopen 以只读模式 r 打开文件 但就我而言 我观察到 fopen 调用没有返回 它不返回 NULL 或有效指针 执行在 fopen 调用时被阻止 文件补丁绝对正确 我已经验证过 并且不存在与权限相关的问题 任何人
  • Linux 中的动态环境变量?

    Linux 中是否可以通过某种方式拥有动态环境变量 我有一个网络服务器 网站遵循以下布局 site qa production 我想要一个环境变量 例如 APPLICATION ENV 当我在 qa 目录中时设置为 qa 当我在生产目录中时
  • 创建一个空分支?

    我有一个包含项目的 git 存储库 我现在要对这个项目进行大规模的修改 如何为这次大修创建一个空白的新分支 然后当完成时 如何将这个分支切换到master 使用 checkout orphan 命令 git checkout orphan
  • 如何在数组中存储包含双引号的命令参数?

    我有一个 Bash 脚本 它生成 存储和修改数组中的值 这些值稍后用作命令的参数 对于 MCVE 我想到了任意命令bash c echo 0 0 echo 1 1 这解释了我的问题 我将用两个参数调用我的命令 option1 without
  • 所有平台上的java

    如果您想用 java 为 Windows Mac 和 Linux 编写桌面应用程序 那么所有这些代码都相同吗 您只需更改 GUI 即可使 Windows 应用程序更像 Windows 等等 如果不深入细节 它是如何工作的 Java 的卖点之

随机推荐

  • react native js中调用native中的方法

    react native js中调用native中的方法 这里主要涉及到几个类 java ul li Base class for Catalyst native modules that require access to the lin
  • 【笔记】A simple yet effective baseline for 3d human pose estimation

    论文 https arxiv org abs 1705 03098v2 pytorch 本文代码参考 weigq 3d pose baseline pytorch A simple baseline for 3d human pose es
  • 外部中断EXTI

    项目场景 STM32外部中断 EXTI10 15 中断线挂起无法清除问题 问题描述 按键为PD14 输入模式 外部中断 进中断服务函数处理完后仍再次进入中断服务函数 无法退出 中断服务函数已加入清除中断线函数 检查引脚配置 输入模式 RCC
  • Javav中危险字符过滤工具类

    在进行网站开发时 为了避免网站遭到SQL语句的注入式攻击 应该考虑到过滤字符串中的危险字符 在该实例中 可以过滤 lt gt 等字符时 在处理页面中会把这些字符过滤掉 该示例主要利用String的replaceAll方法 public St
  • [spark]计算商品相似度

    一 商品相似度定义 基于物品的协同过滤算法是业界应用最多的算法 它的思想是给用户推荐那些和他们喜欢的物品相似的物品 主要分为两个步骤 一 计算物品之间的相似度 二 根据物品相似度和用户的历史行为给用户生成推荐列表 物品i和物品j的相似度可定
  • 创建工程文件(完整流程)

    创建并完成一个简单的工程的流程 添加文件 创建文件 此时 文件就添加完毕了 设置字体 设置Table的空格字数为4个 书写代码 拷贝的正点原子的例程 点击综合 生成设计后的原理图 第一种方法 进行I O引脚的分配 需要查看电路板的原理图分配
  • 【SSD-Caffe】安装使用教程

    1 下载镜像 参考我的另一篇博客 docker使用教程 我下载的是 docker pull bvlc caffe gpu 这个镜像 2 安装ssd caffe 下载之后这并不是ssd caffe 的环境 是较为原始版本的环境 所以还需要安装
  • 抓取iframe内数据(C#)

    当时企图抓取这iframe数据还费了不少劲 早就想记录下来 但是由于自身懒得让人惊叹 结果一直拖到现在 需求是要获取到一些网站上的大批数据 这些数据都是分很多页的 最初思路就是用web程序一页一页抓取 保存到Excel中 通常情况下用以下代
  • 5大指标:评估RPA项目的ROI,实现投资回报最大化

    ROI 投资回报率 通常是RPA项目中的一个关键指标 在企业步入自动化的早期阶段 关注RPA的投资回报率非常重要 这将影响到一个RPA项目是否值得去做 对企业运营者 尤其是COO 首席运营官 而言 RPA若实施得当 将为企业降本增效带来无与
  • 机器学习苹果识别——python+opencv实现物体特征提取

    以水果为例 要用机器学习来实现水果识别 无论是训练还是识别阶段都需要提取图片中水果的特征值 本篇将讲述如何提取水果的周长 面积 颜色 长度 宽度7个特征值 cv findContours cv findContours将图片中识别到的轮廓返
  • 如何用matlab去修改图像尺寸

    img imread test1 jpg 这里为原始图像 i imresize img 567 390 imwrite i 1 jpg 这里为修改后图像 imread imresize和imwrite 1 imread 读取图像信息 A i
  • 查看VSCode版本

    背景 想要查看一下visual studio code的版本 方法 在vscode菜单栏 帮助 gt 发行说明 Help gt Release Notes 版本为1 36
  • C++auto_ptr的用法

    文章目录 一 auto ptr是什么 二 auto ptr需要包含的头文件 三 auto ptr用法 一 auto ptr是什么 auto ptr 是C 标准库提供的类模板 auto ptr对象通过初始化指向由new创建的动态内存 它是这块
  • TCP 协议(四)重传与超时

    1 TCP 协议中的计时器 TCP 中有四种计时器 Timer 分别为 重传计时器 Retransmission Timer 持久计时器 Persistent Timer 保活计时器 Keeplive Timer 等待计时器 Timer W
  • gdb+gdbserver远程调试技术

    首先声明 此文是在别人的基础上添加一些自己的体会 之前做嵌入式开发的时候 弄过一段时间gdb gdbserver远程调试 最后无果而终 只好将就用printf 首先感谢这篇刘品的文章 看着整洁清楚 http www cnblogs com
  • 目标检测之YOLOv3算法分析

    基本原理 特征网络 输入输出 输入 416 416 3 416 416 3 416 416 3大小的图片 不唯一 但图片大小必为32的倍数 输出3个尺度的feature map 分别为
  • 虹科分享

    说到应用程序和软件 关键词是 更多 在数字经济需求的推动下 从简化业务运营到创造创新的新收入机会 企业越来越依赖应用程序 云本地应用程序开发更是火上浇油 然而 情况是双向的 这些应用程序通常更复杂 使用的开放源代码比以往任何时候都包含更多的
  • 在Linux中使用线程

    我并不假定你会使用Linux的线程 所以在这里就简单的介绍一下 如果你之前有过多线程方面的编程经验 完全可以忽略本文的内容 因为它非常的初级 首先说明一下 在Linux编写多线程程序需要包含头文件pthread h 也就是说你在任何采用多线
  • printf()和cout的区别

    printf 和cout的区别 printf is a function that takes a variable number of arguments the first argument being a format string
  • Ubuntu使用内网穿透实现外网ssh远程登录

    Ubuntu使用内网穿透实现外网ssh远程登录 想要远程Ubuntu可以使用ssh网络协议进行远程登录 那什么时ssh呢 SSH 为 Secure Shell的缩写 由 IETF 的网络小组 Network Working Group 所制