SSH登录及其原理详解

article/2025/10/14 9:52:36

干货时刻

本文主要讲解了什么是SSH以及SSH协议口令验证登录和公钥登录等两种登录方式的原理,同时演示了如何用SSH连接Github

SSH 是什么

SSH的全称为Secure Shell,即安全外壳协议。它是一种专为远程登陆会话和网络服务提供安全性的应用层协议。说白了就是用来连接服务器的一种方式。

SSH的加密原理中,就用到了非对称加密算法。在讲SSH加密原理前,我们先溯本追源,了解一下加密算法和其中经典的非对称加密算法RSA

加密算法

计算机网络中的加密算法主要分为对称加密、非对称加密、散列算法等三种方式。

  • 对称加密:加密和解密使用同一个密钥,例如 DESAESIDEA、国密SM1/SM4等等。
  • 非对称加密:发送方用公钥对信息进行加密,接收方收到密文后,使用私钥进行解密,例如RSAECC和国密SM2
  • 散列算法:哈希加密系列算法,特点是不可逆、唯一性,例如MD5SHA、国密SM3

相比起对称加密,非对称加密的安全性更高,但加解密的效率也相对降低。

因此像HTTPSTLS1.2握手协议就是采用了对称加密和非对称加密结合的方式进行密文数据传输。

RSA 非对称加密算法

RSA加密算法是经典的非对称加密算法,其基本流程如下:

  1. 客户端在本地构建公钥和私钥,然后将公钥发送给服务器
  2. 服务器向客户端发送数据的时候用公钥进行加密,客户端收到数据后用私钥解密
  3. 客户端向服务器发送数据的时候用私钥进行加密,服务器收到数据后用公钥解密

缺点在于:如果公钥在传输中泄漏,则黑客可以用公钥破解客户端发送的数据。

SSH 加密原理

SSH 共有两种登录方式:

  • 口令验证登录
    1. 服务器生成公钥和私钥
    2. 客户端发起连接请求,服务器将公钥发给客户端
    3. 客户端生成口令(服务器密码),并用服务器发来的公钥加密,发送给服务器
    4. 服务器通过私钥解密,拿到口令(服务器密码)
    5. 如果正确则认证成功
  • 密钥验证登录
    • 客户端生成公钥和私钥,将公钥提前部署在服务器上
    • 客户端发起连接请求
    • 服务器随机生成一个字符串,用本地的公钥加密,发送给客户端
    • 客户端通过私钥解密,将解密后的字符串发送给服务器
    • 服务器验证本地字符串和客户端发来的字符串的一致性,如果通过,则认证成功

SSH 远程登录 github

根据上节所述,第一步,我们首先要在客户端生成公钥和私钥。

随便找一个文件夹,右键菜单打开 git bash,键入:

ssh-keygen -t rsa

xedns.png

其中,密钥交换算法选择rsa。之后之后一路敲空格默认即可。

这时,我们可以在本地找到这两把密钥:私钥id_rsa和公钥id_rsa.pub。路径如下:

  • windowsC:/Users/admin/.ssh(不同电脑型号的用户文件夹地址不同,区别就在于admin这个路径,我的是admin,你的可能是ASUS、Lenovo、balabala

    xeSSg.png

  • mac/linux~/.ssh

第二步,我们要把公钥部署到github上。

bash中键入:

cd ~/.ssh
ls
cat id_rsa.pub

如下图所示,我们可以拿到公钥的内容,复制下来。

xesDK.png

接下来,进入我们的github,点击右上角的个人头像,再进入settings

xeV8a.png

之后先点击SSH and GPG keys,再点击New SSH key新建一个SSH公钥

xe0wB.png

如下图所示,将你复制好的公钥粘贴到 balabala的位置,输入自定义的公钥名,点击Add SSH key即可。

xefkS.png

第三步,我们发起连接请求:

ssh -T git@github.com

其中git@github.com相当于目标用户@目标主机

第一次连接通常会弹出来下面这句话:

Are you sure you want to continue connecting (yes/no/[fingerprint])?

我们键入yes即可,之后就会弹出下图,表示登录成功。

xelpN.png

总结与思考

  • 口令验证:其实是将口令进行非对称加密,通信双方都基于这个口令进行后续操作,比如SSH登录中,口令就是服务器密码;再者,传统的TLS握手(TLS 1.2之前)是基于RSA加密算法做密钥交换的,它的口令就是会话密钥。
  • 密钥验证:它的前提条件是服务器需要有客户端的公钥,然后通过一次字符串的非对称加密实现免密码登录

结束语

想要学习更多优质内容的同学,关注收藏一下作者的个人主页:东曜说 ~~


http://chatgpt.dhexx.cn/article/yZ9F7beM.shtml

相关文章

ESXI ssh 登录

ESXI ssh 登录 一. 背景: ESXI 是vmware的虚拟化操作系统,主要是更加linux进行定制化开发的一套轻量级的操作系统.日常操作使用web界面管理就好了,但在某些特殊的场景下,可能需要登录服务器进行故障排查,软件更新,系统重启等. 这时候就需要开启ssh服务进行登录了 二. 操作: …

ssh的两种登录方式

1. 密码登录 这是默认的一种登录方式,如图: 输入密码以后成功登录shell: 以后每次登录都得输入密码,比较麻烦。 2. 公钥登录 为了方便,ssh还提供了使用公钥的登录方式,原理为在client生成一对公私钥,cli…

ssh登录原理解析

1.什么是ssh? 简单说,SSH是一种网络协议,用于计算机之间的加密登录。如果一个用户从本地计算机,使用SSH协议登录另一台远程计算机,我们就可以认为,这种登录是安全的,即使被中途截获,密码也不会…

Linux下SSH登录的三种方式

SSH登录 SSH密钥登录:SSH默认采用密码登录,这种方法有很多缺点,简单的密码不安全,复杂的密码不容易记忆,每次手动输入也很麻烦。密钥登录是更好的解决方案。接下来介绍三种SSH的登录方式。 一:SSH口令登录 …

CSS实现横或竖的分隔线分界线

在仿b站主页的时候&#xff0c;遇到分割线的问题。 横分割线一般使用标签hr 竖分割线其实可以用div的背景色来做 html代码 <div class"line"></div>css代码 .line{background:#E7E7E7;/*背景色为浅灰色*/width:0.6px;/*设置宽高*/height:45px;positi…

css3 做一个漂亮的分割线

原文出处&#xff1a; http://blog.csdn.net/majormayer/article/details/50996444 在网页中我们经常会用到分割线&#xff0c;但是原始的分割线并不太美观&#xff0c;我们可以用css3的skew属性做一个美观一点的分割线&#xff1a; 效果&#xff1a; 分辨率改变&#xff…

html页分割线最简单的实现方式

我们在写前台页的时候一般会碰到需要实现两个快中间加一条竖线&#xff0c;这样会使得页面分布更加清晰&#xff0c;下面就来说一说我的分割线的实现方式&#xff0c;设置一个div并给他设置宽高&#xff0c;然后设置其边框的颜色和宽度。 竖向分割线&#xff1a; <body>…

【html问题】在网页中添加垂直分割线

html中添加水平分割线的方法非常简单&#xff0c;就是使用<hr>标签&#xff0c;但是却没有简单的添加垂直分割线的方法&#xff0c;我在学习的这段时间&#xff0c;自己琢磨了一些添加垂直分割线的方法。 1.在文本中直接使用符号"|"。 优点&#xff1a;简单方…

css之分割线特效

温馨小提示&#xff0c;下面的盒子用的都是Grid布局&#xff0c;如果想要其他布局可以点击这里 CSS Grid Generator 盒子html <div class"parent1"><div class"div1">斜分割线</div><div class"div2">SETTINGS</di…

HTML--页面分割

页面分割排版&#xff0c;最终效果图示&#xff1a;&#xff08;手绘&#xff0c;比较简陋。&#xff09; 思路。一共四个html页面&#xff0c;一个做个父页面home.html&#xff0c;另外三个分别是top.html, left.html, right.html 然后把后面三个html页面拼在一起&#xff0…

HTML设置水平分割线

2019独角兽企业重金招聘Python工程师标准>>> 在Web中使用水平分割线可以分割不同的文字段落或者其它网页组件,轻松地修饰了段落排版,使之更美观。当然,水平分割线还可以更加明显地突出某一段重要的文字,使之更加醒目。 使用<hr>标签可以轻松地设置一条水平…

HTML链接(详细)与分割线(部分)

&#xff08;一&#xff09;说明模块 HTML链接用法------三种属性&#xff1a; * href属性&#xff1a;指定跳转目标&#xff0c;也就是指定需要打开的链接地址&#xff0c;是必须存在的&#xff0c;不可缺省的 * target属性&#xff1a;指定链接标签的弹出方式&…

Web前端基础—html

目录 1. html简介 1.1 常用标签介绍 1.1.1 input输入功能 1.1.2 html的列表 1.1.3 标题标签 1.1.4 分割线 1.1.5 视频播放 1.1.6 一个超简单的作业演示&#xff08;初识style&#xff09; 1. html简介 <!DOCTYPE html><html lang"en"><head&g…

html分割线

34755人阅读 各种分割线Html代码 一、基本线条&#xff1a; 1、<HR> 2、<HRaligncenter width300 color#987cb9SIZE1> align线条位置&#xff08;可选left、right、center&#xff09;&#xff1b;width线条长度&#xff1b;color颜色&#xff1b;size厚度 二、…

html几种美丽的分割线

普通 <HR> <HR aligncenter width300 color#987cb9 SIZE1> align 线条位置&#xff08;可选left、right、center&#xff09;&#xff1b;width 线条长度&#xff1b;color 颜色&#xff1b;size 厚度 特效&#xff08;效果并不是孤立的&#xff0c;可相互组合&am…

Python机器学习基础教程

Python机器学习教程 第一章&#xff1a;对于机器学习&#xff0c;我们选择了Python 第二章&#xff1a;了解SciPy、Pandas 持续更新 ... ...

[机器学习实战] 机器学习基础

1. 机器学习的主要任务&#xff1a;&#xff08;分类、回归&#xff09;有监督学习、&#xff08;聚类、密度估计&#xff09;无监督学习 2. 如何选择合适算法&#xff1a;使用机器学习的目的&#xff1b;需要分析的数据是什么&#xff1b;——分类、回归、聚类还是密度估计&am…

机器学习基本概念

本文首先介绍机器学习的基本流程&#xff0c;然后针对机器学习涉及的数据、算法和评估这三个方面用到的基础概念进行介绍。 1.机器学习流程 机器学习是一个数据流转、分析以及得到结果的过程&#xff0c;它的整个流程大致可以分为六个步骤&#xff0c;按照数据流自上而下的顺…

机器学习基础——损失函数与风险函数

机器学习的目标是从模型的假设空间中选取最优的模型&#xff0c;其具体的策略有经验风险最小化和结构风险最小化。下面简单介绍损失函数和风险函数的相关概念。参考自李航《统计学习方法》。 损失函数 损失函数(loss function)用来预测模型单次预测的好坏&#xff0c;即模型的…

机器学习基础知识之概率论基础详解

机器学习基础知识之概率论基础详解 文章目录 机器学习基础知识之概率论基础详解引言一、随机事件以及其运算1、样本空间的概念2、随机事件3、随机变量4、事件之间的关系4.1包含关系4.2相等关系4.3互不相容 5、事件间的运算5.1并5.2交5.3差5.4对立事件5.5运算性质 6、事件域 二、…