首页 > 其他分享 >ssh连接理解

ssh连接理解

时间:2024-04-09 19:34:17浏览次数:13  
标签:公钥 加密 登录 理解 Server Client ssh 连接 SSH

SSH登录过程

 

1. 初见SSH

SSH是一种协议标准,其目的是实现安全远程登录以及其它安全网络服务

SSH仅仅是一协议标准,其具体的实现有很多,既有开源实现的OpenSSH,也有商业实现方案。使用范围最广泛的当然是开源实现OpenSSH。

2. SSH工作原理

在讨论SSH的原理和使用前,我们需要分析一个问题:为什么需要SSH?

从1.1节SSH的定义中可以看出,SSH和telnet、ftp等协议主要的区别在于安全性。这就引出下一个问题:如何实现数据的安全呢?首先想到的实现方案肯定是对数据进行加密。加密的方式主要有两种:

  1. 对称加密(也称为秘钥加密)
  2. 非对称加密(也称公钥加密)

所谓对称加密,指加密解密使用同一套秘钥。如下图所示:


图1-1:对称加密-Client端
图1-2:对称加密-Server端

对称加密的加密强度高,很难破解。但是在实际应用过程中不得不面临一个棘手的问题:如何安全的保存密钥呢?尤其是考虑到数量庞大的Client端,很难保证密钥不被泄露。一旦一个Client端的密钥被窃据,那么整个系统的安全性也就不复存在。为了解决这个问题,非对称加密应运而生。非对称加密有两个密钥:“公钥”“私钥”

两个密钥的特性:公钥加密后的密文,只能通过对应的私钥进行解密。而通过公钥推理出私钥的可能性微乎其微。

下面看下使用非对称加密方案的登录流程:


图1-3:非对称加密登录流程
  1. 远程Server收到Client端用户TopGun的登录请求,Server把自己的公钥发给用户。
  2. Client使用这个公钥,将密码进行加密。
  3. Client将加密的密码发送给Server端。
  4. 远程Server用自己的私钥,解密登录密码,然后验证其合法性。
  5. 若验证结果,给Client相应的响应。

私钥是Server端独有,这就保证了Client的登录信息即使在网络传输过程中被窃据,也没有私钥进行解密,保证了数据的安全性,这充分利用了非对称加密的特性。

这样就一定安全了吗?

上述流程会有一个问题:Client端如何保证接受到的公钥就是目标Server端的?,如果一个攻击者中途拦截Client的登录请求,向其发送自己的公钥,Client端用攻击者的公钥进行数据加密。攻击者接收到加密信息后再用自己的私钥进行解密,不就窃取了Client的登录信息了吗?这就是所谓的中间人攻击


图1-4:中间人攻击
SSH中是如何解决这个问题的?
1. 基于口令的认证

从上面的描述可以看出,问题就在于如何对Server的公钥进行认证?在https中可以通过CA来进行公证,可是SSH的publish keyprivate key都是自己生成的,没法公证。只能通过Client端自己对公钥进行确认。通常在第一次登录的时候,系统会出现下面提示信息:

The authenticity of host 'ssh-server.example.com (12.18.429.21)' can't be established.
RSA key fingerprint is 98:2e:d7:e0:de:9f:ac:67:28:c2:42:2d:37:16:58:4d.
Are you sure you want to continue connecting (yes/no)?

上面的信息说的是:无法确认主机ssh-server.example.com(12.18.429.21)的真实性,不过知道它的公钥指纹,是否继续连接?

之所以用fingerprint代替key,主要是key过于长(RSA算法生成的公钥有1024位),很难直接比较。所以,对公钥进行hash生成一个128位的指纹,这样就方便比较了。

如果输入yes后,会出现下面信息:

Warning: Permanently added 'ssh-server.example.com,12.18.429.21' (RSA) to the list of known hosts. 
Password: (enter password)

该host已被确认,并被追加到文件known_hosts中,然后就需要输入密码,之后的流程就按照图1-3进行。

2.基于公钥认证

在上面介绍的登录流程中可以发现,每次登录都需要输入密码,很麻烦。SSH提供了另外一种可以免去输入密码过程的登录方式:公钥登录。流程如下:


图1-5:公钥认证流程
  1. Client端用户TopGun将自己的公钥存放在Server上,追加在文件authorized_keys中。
  2. Server收到登录请求后,随机生成一个字符串str1,并发送给Client。
  3. Client用自己的私钥对字符串str1进行加密。
  4. 将加密后字符串发送给Server。
  5. Server用之前存储的公钥进行解密,比较解密后的str2和str1。
  6. 根据比较结果,返回客户端登陆结果。
    参考链接

标签:公钥,加密,登录,理解,Server,Client,ssh,连接,SSH
From: https://www.cnblogs.com/zhihongShee/p/18124635

相关文章

  • ssh远程不登录执行命令,不能执行alias 别名的命令
    前言全局说明ssh远程不登录执行命令,不能执行alias别名的命令一、bash的工作模式bash可以有不同的调出的方式,例如开机之后按Alt+F1~Alt+F6呼出不同的终端,输入账户密码进入的shell;ssh远程登陆到一台机器进行的shell;又或者在一个shell中执行bash命令又创建了一个s......
  • 说说你对算法中时间复杂度,空间复杂度的理解?如何计算?
    一、前言算法(Algorithm)是指用来操作数据、解决程序问题的一组方法。对于同一个问题,使用不同的算法,也许最终得到的结果是一样的,但在过程中消耗的资源和时间却会有很大的区别衡量不同算法之间的优劣主要是通过时间和空间两个维度去考量:时间维度:是指执行当前算法所消耗的时间,我......
  • 深度解读RAGFlow的深度文档理解DeepDoc
    4月1日,Infinity宣布端到端RAG解决方案RAGFlow开源,仅一天收获上千颗星,到底有何魅力?我们来安装体验并从代码层面来分析看看。安装体验服务器需要有docker,或者直接访问官方提供的demo:https://demo.ragflow.io/docker-compose安装需要确保vm.max_map_count不小于2621......
  • STLINK-V3PWR连接STM32最小系统板方法(含引脚分布)
    前段时间导师给我了一个STLINK-V3PWR,让我试着用它下载程序到STM32单片机上,我找了半天发现网上资源挺少的,于是自己搞了一下,从官网下载了相关的规格书,然后连了一下。下面是我自己找的官方资源然后翻译的。下面是STLINK-V3PWR的调试端口引脚分布。手上只有STM32F103C6T6A......
  • JDBC驱动连接MogDB/opengauss
    JDBC驱动连接MogDB/opengauss一、环境说明[root@node1~]#cat/etc/redhat-releaseCentOSLinuxrelease7.6.1810(Core)[root@node1ext]#java-versionjavaversion"1.8.0_301"Java(TM)SERuntimeEnvironment(build1.8.0_301-b09)JavaHotSpot(TM)64-Bit......
  • ubuntu 系统连接了 蓝牙耳机但是没有声音也无法设置
    我的网卡是ax210带蓝牙。系统是ubuntu20.04$pactlload-modulemodule-bluetooth-discoverFailure:Moduleinitializationfailed虽然失败了,但是好像出来了下面的选项了:pavucontrol然后,我的蓝牙耳机就有声音了,在设置那里的声音选择输出就行。我也不懂。参考:https......
  • 深入理解 WebSocket:实时双向通信的核心技术(python案例)
    引言WebSocket是一种在Web开发中广泛使用的通信协议,它提供了一种实时、双向的通信机制,允许客户端和服务器之间建立持久连接,实现高效的实时数据传输。本文将深入探讨WebSocket的工作原理、优势、应用场景以及使用示例,帮助读者全面了解WebSocket技术。什么是WebSocket?......
  • CentOS7设置ssh本机免密登录
    点击查看代码登出Connectiontoclone1closed.[[email protected]]#ll总用量16-rw-rw-r--.1rootroot3934月909:23authorized_keys-rw-------.1rootroot16794月719:16id_rsa-rw-r--r--.1rootroot3934月719:16id_rsa.pub-rw-r--r--.1r......
  • 热更新框架3-能够理解框架的设计思想
    热更新框架是一种用于在运行时更新应用程序代码的工具。它的设计思想主要是为了解决应用程序更新的问题,使得开发者可以在不停止或重新启动应用程序的情况下,实时地更新代码和资源。热更新框架的设计思想通常包括以下几个方面:动态加载:热更新框架通过动态加载机制,将新的代码和......
  • 深入理解PHP+Redis实现布隆过滤器(亿级大数据处理和黑客攻防必备)
    布隆过滤器极简概括英文名称BloomFilter,用于判断一个元素是否在一个大数据集合中,如果检测到存在则有可能存在,如果不存在则一定不存在。Redis官网对于布隆过滤器的说明:https://redis.io/docs/data-types/probabilistic/bloom-filter/使用场景防止缓存穿透:用于快速判断某个商......