主页

引言

在日常开发和运维中,我们时常需要通过SSH登录远程主机,进行一些运维管理操作。SSH可以在提供了一种在不安全网络 安全访问远程计算机的方式。

由于本人在日常办公中也经常用到SSH, 出于对SSH工作原理的好奇,查看了大量的中英文资料,发现大多数中文资料对SSH原理介绍不够清楚且存在诸多错误。

写作本文主要出于两个目的:

  1. 对自己查看的英文资料的汇总
  2. 希望给大家带来ssh工作原理相关的更准确的介绍

本文内容组织如下:

  • 什么是SSH
  • SSH口令认证
  • SSH公钥认证

什么是SSH

SSH,也称为Secure Shell或Secure Socket Shell,是一种网络协议,为用户(特别是系统管理员)提供了在不安全网络上安全访问计算机的方式。SSH提供了密码身份验证、公钥身份验证等多种方式,并广泛用于网络管理员远程管理系统和应用程序,使他们能够通过网络登录到另一台计算机,执行命令并在计算机之间传输文件。

SSH采用客户端-服务器模型,包含一个SSH客户端(用于显示会话的一端)和一个SSH服务端(用于运行会话的一端)。默认情况下,SSH服务器监听端口22。

SSH口令认证

我们在使用SSH客户端Client访问远程SSH服务Sever时,服务器需要对客户端进行身份认证(客户端认证),其中最常见的就是口令认证模式, 我们以登录远程服务器为例,口令认证模式流程如下:

建立安全通道

用户在客户端使用ssh root@host登录服务器时,ssh首先会建立安全通道, 建立安全通道主要有两个目的:

  • 客户端对服务端进行认证(服务端认证
  • 客户端与服务器协商会话密钥,用于后续通信加密,保证通信安全性

在客户端对服务端进行初次认证时,客户端通常会进行提示,需要由用户去人工确认访问的服务器fingerprint是否可信:

➜  ~ ssh root@my-ssh-server
The authenticity of host 'my-ssh-server (192.168.1.11)' can't be established.
ED25519 key fingerprint is SHA256:M37JXY37sYNyoE9KujJlTxXs3NO8D7pzEMQirwD6if0.
This host key is known by the following other names/addresses:
~/.ssh/known_hosts:9: 192.168.1.11
Are you sure you want to continue connecting (yes/no/[fingerprint])? yes
Warning: Permanently added 'my-ssh-server' (ED25519) to the list of known hosts.
Welcome to OS 3 64bit
Version 3.1 20221031

用户选择YES后,服务端身份会被保存到客户端~/.ssh/known_hosts文件中,下次再登录时,需要在文件中进行匹配,无需用户在客户端再次进行确认。保存格式如下:

192.168.1.11 ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAIGwnWKZECb3nZINMvaYiFLhmlu9wnEtomHb1U7SDQOZ7
  • 服务端ip地址
  • 服务端公钥对应的密码算法
  • 服务端公钥

口令认证流程

在客户端和服务端建立安全通道后,客户端会将用户口令发送给服务端, 服务端对用户口令进行验证,具体的验证流程与具体的操作系统有关,在linux系统中一种常见的验证流程如下:

  • /etc/shadow读取用户密码(这里的密码一般都经过加密处理,通常是哈希加盐的方式)
  • 将从客户端收到的用户明文密码进行哈希加盐处理,并与上步骤得到的进行比对,如果相同,则验证通过

SSH公钥认证

口令认证方式有以下几个缺点:

  • 安全性较差,在服务器被攻击的情况下,用户口令将会被获取
  • 每次访问服务器,需要用户输入口令,不便利

ssh公钥认证很好的解决了以上两个问题,在公钥认证模式下:

  • 用户口令不需要发送到服务器,因此即使服务器被攻击,也不会泄露敏感信息
  • 客户端认证借助了密码技术,通过数字签名-验证技术自动完成,不再需要用户频繁输入口令

由于用户登录不再使用口令,因此使用公钥认证方式进行远程服务器的登录,我们称之为免密登录。公钥认证模式流程如下:

准备阶段

公钥认证模式需要有个准备阶段(初始化阶段),该阶段主要是将客户端ssh公钥保存到服务器上,作为客户端身份的一部分, 用于:

  • 客户端身份检查
  • 用于后面流程中,对challenge进行加密(这样仅用于对应私钥的客户端可以解密得到明文的challenge)

ssh提供了ssh-copy-id命令来方便用户将客户端公钥部署到服务端:

➜  ~ ssh-copy-id root@192.168.1.11
/usr/bin/ssh-copy-id: INFO: Source of key(s) to be installed: "/Users/hxy/.ssh/id_rsa.pub"
/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@82.157.36.61's password:

值得注意的是,该命令需要输入口令进行认证,通过后服务端会自动将客户端ssh公钥保存到~/.ssh/authorized_keys文件中。保存格式如下:

ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABgQDlc...省略...aM= hxy@HXY-MB1

其中,三个字段的含义:

  • 客户端公钥对应的密码算法
  • 客户端公钥
  • 客户端对应的用户名和主机名

建立安全通道

与口令认证中的流程相同,不再赘述

公钥认证流程

在公钥认证流程中,主要包含以下几个步骤:

  • 客户端发送自己的ssh公钥
  • 服务端收到后与准备阶段事先保存的进行匹配。如果成功则生成随机字符串, 并使用客户端公钥加密发送给客户端(该随机字符串一般称为challenge-挑战码
  • 客户端解密得到challenge,并计算哈希值(这里参与计算哈希值的还有其他信息,如会话ID等,为了方便,这里统一省略)
  • 服务端计算challenge哈希值,并与从客户端收到的进行比对。如果验证通过,则表示认证成功。

需要注意的是,在第三步骤中,由于客户端收到的challenge是经过公钥加密的,通过密码学非对称加密的性质,只有对应的私钥能够解密。这里进一步保证了通信的安全性。

结论

本文详细介绍了SSH客户端认证的两种模式、以及相应的工作原理,通过本文希望读着对ssh工作原理有个简单的认识,并在工作中遇到相关问题知道如何去拍错和修复。

本文未详细介绍建立安全通道流程,主要是因为SSH协议有两个大的版本SSH1和SSH2,这两个版本在该流程处理上存在较大的差异,因此本文对该流程进行了共性描述。

后续会单独通过一篇博文介绍这部分的详细流程以及不同版本的差异。

参考资料

SSH原理与实践(一)的更多相关文章

  1. SSH 的原理和实践

    最近自己在学习使用SSH,现将自己理解的SSH原理和实践SSH的操作写成一篇博客,以供日后查看. 一.SSH是什么?为什么会出现SSH? SSH英文全称是Secure Shell,即安全外壳.首先SS ...

  2. SSH原理讲解与实践

    一.简介 SSH全名Secure Socket Shell,安全外壳传输协议.专为远程登录会话和其他网络服务提供安全性的协议 二.加密算法 要了解SSH的原理,就要先知道目前主流的俩种加密算法 2.1 ...

  3. 2018-2019-2 20165225『网络对抗技术』Exp2:后门原理与实践

    2018-2019-2 20165225『网络对抗技术』Exp2:后门原理与实践 一.实验说明 任务一:使用netcat获取主机操作Shell,cron启动 (0.5分) 任务二:使用socat获取主 ...

  4. 2018-2019-2 20165312《网络攻防技术》Exp2 后门原理与实践

    2018-2019-2 20165312<网络攻防技术>Exp2 后门原理与实践 课上知识点梳理总结 1.后门的概述 后门是指不经过正常认证流程而访问系统的通道 两个关键词:未认证.隐通道 ...

  5. ssh原理图解

    SSH(Secure Shell)是一种能够以安全的方式提供远程登录的协议,也是目前远程管理Linux系统的首选方式.在此之前,远程登录一般常用FTP和Telnet,但是它们以明文的形式在网络中传输账 ...

  6. 2018-2019-2 网络对抗技术 20165318 Exp2 后门原理与实践

    2018-2019-2 网络对抗技术 20165318 Exp2 后门原理与实践 后门的基本概念及基础问题回答 常用后门工具 netcat Win获得Linux Shell Linux获得Win Sh ...

  7. 图解SSH原理

    1. 初见SSH SSH是一种协议标准,其目的是实现安全远程登录以及其它安全网络服务. SSH仅仅是一协议标准,其具体的实现有很多,既有开源实现的OpenSSH,也有商业实现方案.使用范围最广泛的当然 ...

  8. (转)图解SSH原理

    图解SSH原理 原文:https://www.jianshu.com/p/33461b619d53 http://blog.51cto.com/forlinux/1352900---------SSH ...

  9. Atitit 管理原理与实践attilax总结

    Atitit 管理原理与实践attilax总结 1. 管理学分类1 2. 我要学的管理学科2 3. 管理学原理2 4. 管理心理学2 5. 现代管理理论与方法2 6. <领导科学与艺术4 7. ...

  10. Atitit.ide技术原理与实践attilax总结

    Atitit.ide技术原理与实践attilax总结 1.1. 语法着色1 1.2. 智能提示1 1.3. 类成员outline..func list1 1.4. 类型推导(type inferenc ...

随机推荐

  1. C#使用Elasticsearch入门

    一.Elasticsearch 简介 Elasticsearch 是一个分布式.RESTful 风格的搜索和数据分析引擎,能够解决不断涌现出的各种用例.作为 Elastic Stack 的核心,它集中 ...

  2. Django笔记四十二之model使用validator验证器

    本文首发于公众号:Hunter后端 原文链接:Django笔记四十二之model使用validator验证器 这一篇笔记介绍一下 model 里的 validator 验证器. 首先,这是个什么东西呢 ...

  3. 从零开始配置 vim(4)——键盘映射的一些技巧

    通过前面的学习,我们已经知道了如何进行键盘映射,并且也知道了在任何场合应该使用非递归版本的映射.这篇再介绍一些使用关于快捷键映射的内容作为收尾 快速编辑 vimrc 文件 通过前面掌握的知识,相信各位 ...

  4. 15.6寸不到1kg!LG Gram超轻薄本发布:13代酷睿加持

    出道就以轻薄为主要卖点的LG Gram系列笔记本产品,在今年CES 2023上也迎来更新. 隶属于全新LG Gram UltraSlim产品线的15.6寸新品(15Z90RT),机身重量仅998g,厚 ...

  5. 2.4 资源管理器Restorator--《恶意代码分析实战》

    Lab01-04.exe 实验内容: 1.将文件上传到http://www.VirusTotal.com 进行分析并查看报告.文件匹配到了已有的反病毒软件特征吗? 2.是否有这个文件被加壳或混淆的任何 ...

  6. NC16619 [NOIP2008]传球游戏

    题目链接 题目 题目描述 上体育课的时候,小蛮的老师经常带着同学们一起做游戏.这次,老师带着同学们一起做传球游戏. 游戏规则是这样的:n个同学站成一个圆圈,其中的一个同学手里拿着一个球,当老师吹哨子时 ...

  7. Table布局

    Table布局 <table>最常用的也是最正确的使用方法是制作表格,由于其对占据的空间有着划分的作用,便可以使用<table>来布局. 实例 实现一个简单的布局,将表格的bo ...

  8. Laravel入坑指南(4)——数据库(Mysql)

    来来来,新的一节出炉了.这一节大家一起了解,Laravel如何对Mysql进行CURD. 我们回顾一下,PHP操作Mysql无非就是通过五个要素:host(地址).username(用户名).pass ...

  9. Java设计模式-模板模式Template

    介绍 模板方法模式(Template Method Pattern),又叫模板模式(Template Pattern),z 在一个抽象类公开定义了执行.它的方法的模板.它的子类可以按需要重写方法实现, ...

  10. java处理json类型数据--阿里巴巴fastjson api常用方法实战

    fastjson介绍 最近工作上经常需要解析json类型数据以及java对象到json类型的互转,特地研究了下阿里巴巴的fastjson,这个是国内用的 比较多的json转换api,还有其他的入jac ...