ssh免密登录

  • Post author:
  • Post category:其他



如果饿了就吃,困了就睡,渴了就喝,人生就太无趣了




1 ssh密码登录

ssh使用的非对称加密,非对称加密中有两个密钥:公钥和私钥。公钥由私钥产生,但却无法推算出私钥;公钥加密后的密文,只能通过对应的私钥来解密。

ssh密码登录流程:

在这里插入图片描述


  1. 服务器A



    服务器B

    送登录请求

  2. 服务器B

    接收到请求后将公钥发送给

    服务器A

  3. 服务器A

    使用

    服务器B

    的公钥对登录密码进行加密生成密文

  4. 服务器A

    将密文发送给

    服务器B

  5. 服务器B

    使用私钥将密文解密,获得

    服务器A

    输入的密码

  6. 服务器B

    校验密码是否合法(此为本机work密码)

  7. 服务器B

    返回登录结果给

    服务器A

    :成功登录或密码错误



2 中间人攻击

在非对称加密中可以有效保护登录密码不被泄漏,但这是在建立连接到真实服务器的情况下。设想一下,如果拦截者并不监听密码或公钥,而是直接伪装成服务器呢:

在这里插入图片描述


拦截者

在获取了服务器B的密码,就可以攻击

服务器B

了,ssh为了解决这个问题,将问题抛给了用户,如图

在这里插入图片描述

第一次连接一个陌生服务器,会询问发起者是否相信这个主机,发起者输入yes后,将该服务器加到known_hosts文件中,下次连接不在确认。



3 ssh免密登录

如果每次ssh都需要输入密码,非常麻烦,ssh又提供了一个免密方式,公钥登录。

在这里插入图片描述


  1. 服务器A

    将公钥发送给

    服务器B

  2. 服务器B



    服务器A

    的公钥写入

    authorized_keys

    文件中

  3. 服务器A

    发起登陆请求,并将自己的公钥一起发送

  4. 服务器B

    将接收到的公钥和

    authorized_keys

    进行比对。
  5. 如果有相同的公钥,生成一个随机数

    R

    ,使用

    服务器A

    的公钥对随机数

    R

    进行加密,生成

    pubKey(R)

  6. 服务器B



    pubKey(R)

    发送给

    服务器A

  7. 服务器A

    使用私钥 对

    pubKey(R)

    进行解密,得到随机数

    R

  8. 服务器A



    R



    SessionKey

    (每个会话的唯一密钥)使用

    MD5

    进行加密,生成

    Digest1

  9. 服务器A



    Digest1

    发送给

    服务器B

  10. 服务器B

    同样把随机数

    R



    SessionKey

    使用

    MD5

    进行加密,生成

    Digest2

  11. 服务器B

    比较

    Digest1



    Digest2

    是否相同,相同则登录成功。



4 具体操作



4.1 服务器A生成密钥对

执行下面的命令,一路回车即可

ssh-keygen

在这里插入图片描述



4.2 将公钥写入authorized_keys文件

cd ~/.ssh
touch authorized_keys
cat id_rsa.pub >> authorized_keys



4.3 将authorized_keys发送给服务器B

scp authorized_keys root@you_ip



4.4 验证免密登录

在服务器A ssh连接服务器B,如图

在这里插入图片描述



参考博客


https://www.cnblogs.com/276815076/p/10449354.html



https://www.cnblogs.com/shireenlee4testing/p/10366061.html



版权声明:本文为weixin_41938180原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。