zoukankan      html  css  js  c++  java
  • ssh公钥认证原理及设置root外的其他用户登录ssh

    1)创建其他用户

    useradd [-d 登录目录] [-G ssh][用户名] 
    一定要将用户添加到ssh组不然无法没有权限登录ssh

    2)设置ssh不允许root登录

    vi /etc/ssh/sshd_config
    找到 PermitRootLogin yes
    修改为PermitRootLogin no
    并在尾部添加 AllowUsers  [用户名列表]
    然后重启ssh服务,/etc/init.d/ssh restart

    3)如何使用公钥认证

    先解释下什么是公钥密钥:

    公钥私钥是不对称加密方式,公私钥的本质都是密钥,公钥是可以公开的代表用户信息的一个数字证书,私钥是用户公钥对应的一个的密钥。公钥可以公开,密钥一定要自己保存好不要泄露。两个密钥是互解的关系,即用公钥加密的内容只能用私钥解密,用私钥加密的内容只能用公钥解密。
    公钥可以让任何人知道,因为它是代表用户信息的一个签章。
    比如A公开了它的公钥,其向B发送了一个信息,这个信息用A的私钥加密的,B用A的公钥解密出这个信息,就说明信息是来自A的。
    又比如A想发送一个只有B能解密出的信息,则A用B的公钥加密信息,然后发送给B,则只有B能解密出信息,因为只有B有它的公钥对应的密钥。
     

    ssh 的公钥认证就是使用了公私钥互解的特性。服务器和客户端都各自拥有自己的公钥和密钥。为了说明方便,以下将使用这些符号。

    Ac 客户端公钥 Bc 客户端密钥 As 服务器公钥 Bs 服务器密钥

    在认证之前,客户端需要通过某种方法将公钥 Ac 登录到服务器上。

    认证过程分为两个步骤。

    1. 会话密钥(session key)生成
      1. 客户端请求连接服务器,服务器将 As 发送给客户端。
      2. 服务器生成会话ID(session id),设为 p,发送给客户端。
      3. 客户端生成会话密钥(session key),设为 q,并计算 r = p xor q。
      4. 客户端将 r 用 As 进行加密,结果发送给服务器。
      5. 服务器用 Bs 进行解密,获得 r。
      6. 服务器进行 r xor p 的运算,获得 q。
      7. 至此服务器和客户端都知道了会话密钥q,以后的传输都将被 q 加密。
    2. 认证
      1. 服务器生成随机数 x,并用 Ac 加密后生成结果 S(x),发送给客户端
      2. 客户端使用 Bc 解密 S(x) 得到 x
      3. 客户端计算 q + x 的 md5 值 n(q+x),q为上一步得到的会话密钥
      4. 服务器计算 q + x 的 md5 值 m(q+x)
      5. 客户端将 n(q+x) 发送给服务器
      6. 服务器比较 m(q+x) 和 n(q+x),两者相同则认证成功

    根据wiki的解释:

    实际上,在客户端请求连接服务端的时候,客户端将Ac告诉了服务端,并且服务端会在请求登录用户目录下的./ssh/authorized_keys  查找是否有这个Ac,如果没有,则认为是非法的连接,后续的认证就没有了。

    ssh公钥认证的使用:
    客户端产生公密钥对,将客户端的公钥添加进服务端用户的ssh认证中。具体操作:
    首先  ssh-keygen 命令产生公私钥对(客户端linux),或者使用window的ssh客户端如secureCRT,putty等生成
    然后 将第一步生成的公钥id_rsa.pub 上传到 服务端,接着 cat id_rsa.pub >> 用户目录/.ssh/ authorized_keys  将公钥添加进认证中
    第一步生成的密钥放在本地用于跟远程主机的认证
     
     

    参考阅读:

    1.数字签名是什么?

    2.SSH原理与运用(一):远程登录

    3. ssh登录过程详细介绍

     
  • 相关阅读:
    龙果支付系统
    Java并发多线程
    StringRedisTemplate常用操作
    统一支付平台转型
    IntValue()方法 和 ValueOf()方法
    Java中一些知识的归纳总结
    mybatis的一些特殊符号标识(大于,小于,等于,不等于)
    MySQL中大于等于小于等于的写法
    boost::bind应用示例
    VC除零异常(错误)捕获
  • 原文地址:https://www.cnblogs.com/xuntu/p/3799138.html
Copyright © 2011-2022 走看看