ssh原理与实践(一)

这篇具有很好参考价值的文章主要介绍了ssh原理与实践(一)。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

主页

  • 个人微信公众号:密码应用技术实战
  • 个人博客园首页:https://www.cnblogs.com/informatics/

引言

在日常开发和运维中,我们时常需要通过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原理与实践(一)

建立安全通道

用户在客户端使用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原理与实践(一)

准备阶段

公钥认证模式需要有个准备阶段(初始化阶段),该阶段主要是将客户端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,这两个版本在该流程处理上存在较大的差异,因此本文对该流程进行了共性描述。
后续会单独通过一篇博文介绍这部分的详细流程以及不同版本的差异。文章来源地址https://www.toymoban.com/news/detail-583809.html

参考资料

  • The Secure Shell (SSH) Protocol Architecture
  • The Secure Shell (SSH) Transport Layer Protocol
  • The Secure Shell (SSH) Authentication Protocol
  • SSH-1: https://docstore.mik.ua/orelly/networking_2ndEd/ssh/ch03_04.htm
  • SSH-2: https://docstore.mik.ua/orelly/networking_2ndEd/ssh/ch03_05.htm#ch03-10732.html

到了这里,关于ssh原理与实践(一)的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 个人微信公众号文章留言功能开通方法,无需迁移账号,三个步骤轻松完成

    总所周知。微信公众号关闭了2018年以后开通的微信公众号的评论管理功能。这样其实对于个人账号而言不太方便。现在常见的方法是迁移到别人在18年之前的账号上去,但是这个操作很麻烦,而且账号也不一定能弄到,还需要花费大加强。 实际上,公众号原创图文是可以插入

    2024年02月06日
    浏览(49)
  • uniapp小程序中长按识别公众号二维码,企业微信二维码,个人微信二维码

    长按识别公众号二维码,企业微信二维码,个人微信二维码 效果图 通过给image标签添加show-menu-by-longpress=\\\"true\\\"属性,实现长按识别功能 注意:二维码图片样式尺寸不能太小,太小时也会出现长按二维码识别不了

    2024年02月12日
    浏览(59)
  • PHP实践:手把手微信公众号网页授权登录功能实现

    🏆作者简介,黑夜开发者,全栈领域新星创作者✌,CSDN博客专家,阿里云社区专家博主,2023年6月CSDN上海赛道top4。 🏆数年电商行业从业经验,历任核心研发工程师,项目技术负责人。 🏆本文已收录于PHP专栏:PHP进阶实战教程。 🏆另有专栏PHP入门基础教程,希望各位大佬

    2024年02月12日
    浏览(52)
  • ssh原理与实践(一)

    个人微信公众号:密码应用技术实战 个人博客园首页:https://www.cnblogs.com/informatics/ 在日常开发和运维中,我们时常需要通过SSH登录远程主机,进行一些运维管理操作。SSH可以在提供了一种在 不安全网络 安全访问 远程计算机的方式。 由于本人在日常办公中也经常用到SSH, 出

    2024年02月17日
    浏览(26)
  • 23.实战演练--个人主页

    2024年01月19日
    浏览(53)
  • 制作github个人主页

    github创建一个项目命名为.github.io git clone一个他人的主页作为模板 按情况修改readme.md, index.html中名字,邮箱,github,google scholor 如果您创建的 .github.io 仓库的 部分与您的 GitHub 用户名不一样,您需要通过 GitHub Pages 设置来指定要使用的用户名。以下是具体的步骤: 进入 .github

    2024年01月25日
    浏览(53)
  • 基于github制作个人学术网站(主页)

    首先找到一个学术模板,fork到远程仓库。academicpages,如果不是很清楚具体的步骤,可以参考保姆级教程。在github上对该网站代码修改不是很方便,肯定是在本地进行更新后push到远程仓库。 学会下载和安装就行,一路默认,可以先学习一下Git相关的原理及基础操作,可以参考

    2024年02月15日
    浏览(54)
  • 个人Scratch HTML程序合集 主页

    个人Scratch HTML程序合集 主页 此程序是本人制作的Scratch HTML程序合集的主页,使用HTML+CSS编写,整合了本人近期发布的转换为HTML的Scratch程序的内容,可以通过主页内的链接打开相应的程序和博客。主页在本地运行,大家可以在github.com下载主页文件及相关资源。 代码如下

    2024年02月16日
    浏览(48)
  • html实现好看的个人介绍,个人主页模板3(附源码)

    作者:xcLeigh 文章地址:https://blog.csdn.net/weixin_43151418/article/details/131263195 html实现好看的个人介绍,个人主页模板3(附源码) ,第三种风格,html源码下载,响应式布局,动态展示数据效果,界面整洁,布局清晰。 代码备注详细,可在此基础上更加完善功能,打造属于自己的个人

    2024年02月10日
    浏览(87)
  • html实现好看的个人介绍,个人主页模板5(附源码)

    作者:xcLeigh 文章地址:https://blog.csdn.net/weixin_43151418/article/details/131273315 html实现好看的个人介绍,个人主页模板5(附源码) ,第五种风格,html源码下载,响应式布局,动态展示数据效果,界面整洁,布局清晰。 代码备注详细,可在此基础上更加完善功能,打造属于自己的个人

    2024年02月09日
    浏览(82)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包