zoukankan      html  css  js  c++  java
  • 关于ssh加密方式的理解

    最近公司服务器被挖矿,所以更换了ssh的连接方式,从之前的密码登陆更换为密钥登陆方式,且禁止了密码登陆。所以在配置这个密钥的过程中,顺带了解了些ssh的原理和相关知识。通用的开源

    1、ssh是什么,为什么需要ssh,ssh用在哪里

    1)ssh是一种协议标准,也叫做安全外壳协议,主要为远程登录会话和其他网络服务提供安全性的协议。全称为Secure SHell,本质上是进行加密的shell。它既可以代替telnet,又可以为ftp、pop、甚至ppp提供一个安全的“通道”。

    2)利用 SSH 协议,可以有效防止远程管理过程中的信息泄露问题,而且也能够防止DNS欺骗和IP欺骗,因为传输过程中对数据进行压缩,也提高了传输效率。

    3)几乎所有UNIX平台—包括HP-UXLinuxAIXSolarisDigital UNIXIrix,以及其他平台,都能 运行SSH。现在主流的开源实现是openssh,当然也有很多商业实现。

    2、两种加密方式,ssh的使用方式,ssh支持的两种级别的安全验证

      1)加密方式分为两种 对称加密和非对称加密。对称加密顾名思义,数据加密和解密使用同一个密钥,优点是加密强度高,但是缺点是密钥丢失很容易造成安全问题。

    ssh是使用非对称加密对数据传输过程进行处理,分为私钥和公钥,在进行数据加密处理的时候通常使用公钥对数据进行加密,私钥进行解密(这里注意仅限于数据加密的时候,签名的时候刚好相反,使用私钥进行签名,公钥进行验签)。且基本不存在通过公钥推导出私钥的可能

    a、第一种方式为密码登录。在整个过程中,客户端本身不存有任何密钥。

    第一步,客户端输入用户名密码,发出登陆请求。

    第二步,服务端接收到请求并返回给客户端公钥以及公钥指纹(公钥指纹是为了防止中间人攻击的产物,是由于公钥本身过长(1024位)而对其hash之后产生的128位的指纹,方便在第一次连接服务端的时候,用户对服务端身份的对比确认。用户确认通过后,该host会被加入到known_hosts。第二次连接时,不需要再次确认服务端身份了。感兴趣可以搜索中间人攻击,如下图)

    第三步,客户端收到服务端发送的公钥,对密码进行加密然后将密文发送给服务端

    第四步,服务端收到密文,使用私钥将密文进行解密,得到密码并对比确认

    第五步,服务端返回给客户端,登陆结果。

     b、 第二种方式为公钥登陆,也就是免密登陆。

    第一步,客户端生成一对密钥,手动将公钥添加到服务端的authorized_keys中。

    第二步,客户端直接发起登陆请求到服务端

    第三步,服务端收到请求后,生成随机数R,并使用公钥对随机数R进行加密,得到密文并返回给客户端

    第四步,客户端收到密文后,使用私钥对密文解密,得到随机数R。然后用MD5对随机数R和SessionKey进行生成摘要A1,并发送给服务端

    第五步,服务端同样用MD5对随机数R和SessionKey进行生成摘要A2,然后对比A1和A2,完成登录确认。

    扩展

    ssh-keygen是用于生产密钥的工具。

    • -t:指定生成密钥类型(rsa、dsa、ecdsa等)
    • -P:指定passphrase,用于确保私钥的安全
    • -f:指定存放密钥的文件(公钥文件默认和私钥同目录下,不同的是,存放公钥的文件名需要加上后缀.pub)

     部分内容和全部图片是从网上拿来用的,如有侵权,联系删除

  • 相关阅读:
    自定义类似smarty模板
    PHP函数相关知识点
    cookie的使用和设置
    进程通过内核缓存区请求设备I/O的一些事情
    多线程模型和问题
    C10K问题和多进程模型
    node.js----一个httpserver提交和解析get参数的例子
    nodejs解析url参数的三种方法
    node.js http模块和fs模块上机实验·
    c++中的srand()和rand() 转载 自:http://blog.sina.com.cn/s/blog_624c2c4001012f67.html
  • 原文地址:https://www.cnblogs.com/olio1993/p/10960306.html
Copyright © 2011-2022 走看看