SSH的大白话说明

SSH通过TCP三次握手建立连接后,使用Diffie-Hellman算法生成对称加密密钥进行安全通信。在密码登录中,密码被该密钥加密传输。对于免密登录,客户端的公钥存储在服务端,通过公钥加密验证身份,确保安全无密码的登录过程。
摘要由CSDN通过智能技术生成

1. 大白话前提

  1. 对称加密 = 加解密都用的同一个秘钥
  2. 非对称加密 = 加解密用的是一对秘钥,也就是公钥私钥
  3. 公钥,顾名思义,公开的,多人拥有的
  4. 私钥,顾名思义,私有的,一般就一人拥有
  5. 非对称加密既可以用公钥加密然后私钥解密,也可以私钥加密然后公钥解密,根据用途的不同而选择不同的加解密方式
  6. 公钥加密-私钥解密,一般用于登陆密码加密or其他需要加密的内容
  7. 私钥加密-公钥解密,一般用于身份认证,也可以说数字签名,因为私钥唯一=人唯一
  8. Diffie-Hellman算法,一种非对称性算法,可以让双方在有限公开不需互换秘钥的前提下,各自算出来对称加密需要的相同秘钥,参考文章
  9. Hash算法,用于验证唯一性,换句话说,防篡改

2. SSH建立session连接(对称加密+Diffie-Hellman算法的应用)

在这里插入图片描述
过程说明:

  1. 客户端发起三次握手建立TCP连接,参考文章
  2. 成功建立TCP连接后,服务端发送支持的协议版本列表给客户端
  3. 客户端能在协议版本列表里匹配成功,继续往下
  4. 服务端发送自己的public host key给客户端验证
  5. 客户端验证public host key是否自己要连接的目标服务器
  6. 这时候一切ok,就有了生成session真正建立通讯的基础,接下来利用Diffie-Hellman算法来生成对称加密秘钥
  7. 客户端和服务端公开协商生成一个大质数(质数=只能被1和自己整除的数字,大质数是为了提高破解难度)
  8. 客户端和服务端公开协商选择一个对称加密算法,比如AES
  9. 客户端和服务端,各自选择一个质数,当做各自私钥的基础,不能公开,绝密
  10. 客户端和服务端,使用公开的大质数,公开协商好的加密算法,不能公开的自己私有的质数私钥,生成一个公钥,并互相交换
  11. 客户端和服务端,使用公开的大质数,不能公开的自己的质数私钥,公开的对方的公钥,利用Diffie-Hellman算法,生成对称加密用的私钥,算法保证跟对方生成的秘钥是一样的
  12. 接下来通讯全程,就使用这个一样的私钥加密整个过程

3. SSH的密码登陆(对称加密的应用)

本质上就是利用建立session连接时的秘钥,进行对称加密的过程,以下是可视的用密码登陆的过程说明:

  1. 本地命令行输入 ssh root@192.168.1.1,格式是ssh user@host
  2. 会返回服务器的public host key,也是fingerprint
  3. 本地去known_hosts文件夹里搜是否有这ip的记录,是否有这记录
  4. 如果存在,就继续往下
  5. 如果不存在,会提示是否要信任这次连接,也就是是否要存进known_hosts文件夹里
    The authenticity of host '192.168.1.1 (192.168.1.1)' can't be established.
    ECDSA key fingerprint is SHA256:Y9mSoSMB9XQwlL/0G2ssG/dU2x6e9kiafnL6Alwok/B.
    Are you sure you want to continue connecting (yes/no/[fingerprint])?
    
  6. 输入yes,这时候就互相生成好相同的秘钥了
  7. 再输入密码,这时候密码就会被秘钥加密,然后发送给服务器
  8. 服务器接收到加密的密码后,用相同的秘钥解密,解密成功后,再验证密码是否正确

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

4. SSH的免密登录(公钥加密私钥解密+hash的应用)

前提:先在要登陆服务端的客户端本地,生成一对公钥私钥,然后把公钥添加到服务端的authorized_keys 文件里
在这里插入图片描述
过程说明:

  1. 先建立session连接,获得对称加密的秘钥,后面要用到
  2. 客户端把本地公钥key ID发送给服务端,服务端在authorized_keys 文件里搜索是否有匹配的
  3. 如果有匹配的,服务端生成一个随机数,然后用匹配的公钥加密,发送给客户端
  4. 客户端用私钥解密,解密成功继续,不成功over(这一步验证身份)
  5. 客户端用解密出来的随机数,加上建立session连接获得的对称加密秘钥,做一次md5,然后把结果发送给服务端
  6. 服务端接收到md5后,自己用自己生成的随机数,加上建立session连接获得的对称加密秘钥(跟客户端完全一样),做一次md5,比对一下2个md5是否一致,一致说明success(这一步加强验证,并检查随机数是否被篡改)

参考

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值