ssh 免密码登录 与 密钥公钥原理讲解

前言

由于最近频繁需要登录几个服务器,每次登录都需要输入密码,故相对麻烦。

由于个人服务器用于实验,故对安全性要求不是很高,故想实现ssh免密登录。

通过阅读ssh 公钥私钥认证操作及原理以及ssh公钥登陆。成功实现了自己的需求。

下面来说下讲解公钥密钥的工作原理以及ssh免密登录的实现步骤。

公钥密钥原理概述

在课程计算机基础中,我记得是学过公钥密钥的,公钥和密钥是同时生成的。

公钥用于加密,私钥用于解密。

公钥是很多人可以持有,而密钥只能自己持有。

在ssh中,只需公钥放在服务器A上,那么你就可以通过私钥登录服务器A。

当你连接已放置你公钥服务器A时,服务器A和客户端之间大概存在以下认证流程。

(以下认证流程来自博客: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),两者相同则认证成功

ssh免密登录实验步骤

(实验环境:Ubuntu 17)

1. 若还没安装ssh服务的同学,请先安装。

sudo apt-get install ssh

本文博客地址:http://www.cnblogs.com/toulanboy/

2. 进入家目录下的.ssh文件夹

(若没有该目录,请创建。)

cd ~/.ssh

3. 生成密钥对

(中途会让你输入密钥对的密码,由于我们想免密,故按回车跳过即可。)

(假如设置了,后面通过私钥连接服务器时,则需要输入密钥对的密码。)

ssh-keygen -t rsa

4. 将客户端.ssh目录下的id_rsa.pub复制到服务器A的家目录下

(下面指令的115.115.115.115是服务器IP,lgq是你想登录服务器的用户名)

scp id_rsa.pub lgq@115.115.115.115:~/

5. 在服务器A上,将客户端的id_rsa.pub追加到服务器的ssh的认证列表中

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

6. 客户端后面直接可以通过私钥免密登录了。

ssh lgq@115.115.115.115

至此完毕。希望对你有帮助。

参考:ssh 公钥私钥认证操作及原理以及ssh公钥登陆

上一篇:如何配置ssh免密码登录


下一篇:jdk是什么?jdk1.8安装配置方法