ssh服务认证---基于密钥的认证过程讲解

系统信息

[root@nfs01 ~]# uname -r
2.6.32-696.el6.x86_64
[root@nfs01 ~]# uname -m
x86_64
[root@nfs01 ~]# cat /etc/redhat-release 
CentOS release 6.9 (Final)

ssh分发公钥,进行远程免密登陆过程详解

1)客户端创建密钥对

[root@web01 .ssh]# ssh-keygen -t dsa
Generating public/private dsa key pair.
Enter file in which to save the key (/root/.ssh/id_dsa): 
Enter passphrase (empty for no passphrase): 
Enter same passphrase again: 
Your identification has been saved in /root/.ssh/id_dsa.
Your public key has been saved in /root/.ssh/id_dsa.pub.
The key fingerprint is:
d1:86:87:7a:d4:4a:df:d0:e9:12:4c:9f:46:3e:2b:6b root@web01
The key's randomart image is:
+--[ DSA 1024]----+
|          . .    |
|         B = o   |
|        * O O    |
|       + * * o   |
|      . S + +    |
|       .   +     |
|          E      |
|         .       |
|                 |
+-----------------+
[root@web01 .ssh]# ls
id_dsa  id_dsa.pub

2)客户端分发公钥到服务端

[root@web01 .ssh]# ssh-copy-id -i id_dsa.pub root@172.16.1.31
The authenticity of host '172.16.1.31 (172.16.1.31)' can't be established.
RSA key fingerprint is d8:50:de:b6:99:02:66:dd:e8:63:1a:31:1d:b2:60:dc.
Are you sure you want to continue connecting (yes/no)? yes
Warning: Permanently added '172.16.1.31' (RSA) to the list of known hosts.
root@172.16.1.31's password: 
Now try logging into the machine, with "ssh 'root@172.16.1.31'", and check in:

  .ssh/authorized_keys

to make sure we haven't added extra keys that you weren't expecting.


翻译:
主机'172.16.1.31(172.16.1.31)'的真实性无法建立。
RSA密钥指纹是d8:50:de:b6:99:02:66:dd:e8:63:1a:31:1d:b2:60:dc。
你确定要继续连接吗(是/否)?
警告:将“172.16.1.31”(RSA)永久添加到已知主机列表中。
现在尝试使用“ssh'root@172.16.1.31'”登录到计算机,然后签入:
  .ssh/authorized_keys
以确保我们没有添加您不期望的额外密钥。

[root@web01 .ssh]# ls
id_dsa  id_dsa.pub  known_hosts


来自服务端的公钥rsa
[root@web01 .ssh]# cat known_hosts 
172.16.1.31 ssh-rsa AAAAB3NzaC1yc2EAAAABIwAAAQEArCjSlfwBSCHM/V4jAI5rii8W5fu2/AW2oqpFbEg5IbpnI83vPhSpNZBJWBFYrZRPngTt2cTJixJbyBaa3Dg8MNLBH+rvMq5oOvRBLCwQ3wX0VDncUfTbg/GHDy+3gOX9+5YZQp7YRt9S8oKlIEZGyScnNCPJW2f9i6hvm5uIn3gQ+TLgbGnY42d06EOqfvBtf3HPBlGyWiTiDFxFegFOiL7wefdtJXMGvWC5Cm9/xU8TROxvh6SRi0vO4pPED3WJnXwPFHnRgrPfh4taoSt403+F23u9Hcy8+kYg+f/zXkbIWWt2S5P/ElTciYBmGeDzqjhK+kRrVYB/TiOuCThEHQ==


进入服务端,查看rsa公钥,是否和上面显示的是否一致
[root@nfs01 ~]# cd /etc/ssh/
[root@nfs01 ssh]# cat ssh_host_rsa_key.pub 
ssh-rsa AAAAB3NzaC1yc2EAAAABIwAAAQEArCjSlfwBSCHM/V4jAI5rii8W5fu2/AW2oqpFbEg5IbpnI83vPhSpNZBJWBFYrZRPngTt2cTJixJbyBaa3Dg8MNLBH+rvMq5oOvRBLCwQ3wX0VDncUfTbg/GHDy+3gOX9+5YZQp7YRt9S8oKlIEZGyScnNCPJW2f9i6hvm5uIn3gQ+TLgbGnY42d06EOqfvBtf3HPBlGyWiTiDFxFegFOiL7wefdtJXMGvWC5Cm9/xU8TROxvh6SRi0vO4pPED3WJnXwPFHnRgrPfh4taoSt403+F23u9Hcy8+kYg+f/zXkbIWWt2S5P/ElTciYBmGeDzqjhK+kRrVYB/TiOuCThEHQ== 

    从上面可知,客户端分发公钥到服务端时,会接收到服务端的rsa公钥,并将此公钥保存到文件/root/.ssh/known_hosts中,通过查看服务端/etc/ssh/ssh_host_rsa_key.pub文件内容,确定内容一致。

    在接收到服务端公钥之后,输入服务端密码,将客户端公钥信息发送到服务端/root/.ssh/authorized_keys文件中     此时,服务端拥有客户端的公钥和本机的私钥,客户端拥有服务的公钥和本机的私钥

3)进行免密登陆测试

[root@web01 .ssh]# ssh 'root@172.16.1.31'
Last login: Mon Mar 12 11:46:28 2018 from web01
[root@nfs01 ~]# 

免密登陆成功

第三步免密登陆连接过程讲解:

    在执行此命令(ssh 'root@172.16.1.31')时,首先是客户端发起建立连接请求,请求使用密钥进行安全认证,并发送客户端的公钥信息到服务端,服务端接收到请求之后,首先根据请求连接的root用户查找服务器端root用户家目录下事先保存的客户端的公钥,比较是否和请求连接时发送的公钥一致;如果两个密钥一致,服务器端就用客户端的公钥进行加密“质询”,并发送给客户端。

客户端在接收到“质询”之后,使用本机的私钥进行解密,再把解密结果,通过服务端的公钥进行加密,然后发送给服务端,服务端接收到客户端发送的结果之后,服务端使用本机私钥进行解密,验证质询,如果验证通过,建立连接。

    客户端和服务端进行数据传输时,进行加密、解密的方式进行交流。

客户端拥有服务端的公钥; 服务端拥有客户端的公钥

    客户端使用服务端的公钥进行数据的加密,对接收的服务端的数据使用本机私钥解密。

    服务端使用客户端的公钥进行数据的加密,对接收的客户端的数据使用本机私钥解密。

    私钥不能在网络中传输---私钥可以解密公钥

    公钥可以在网络中传输---公钥不能解密私钥

注:本博客基于自己的理解所写,读者可根据自己的思路进行理解,如果此博文有错误,请告知,谢谢!

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

编辑于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏東雲研究所

Let’s Encrypt 签发通配符证书的方法

签发域名通配符证书的过程是需要 DNS 验证的,acme.sh 这个小工具已经完美解决了这个问题。所以,不考虑其他问题的情况下,使用 DNS API 给网站域...

42490
来自专栏技术博文

ssh证书登录

ssh有密码登录和证书登录,初学者都喜欢用密码登录,甚至是root账户登录,密码是123456。但是在实际工作中,尤其是互联网公司,基本都是证书登录的。内网的机...

87760
来自专栏康怀帅的专栏

nginx 配置 TLSv1.3

将 即将 发布的 TLSv1.3 作为 https 系列的开篇。

62760
来自专栏编程

Nginx HTTP Server中的SSL证书错误

安装SSL证书时快速解决Nginx HTTP服务器错误! Nginx HTTP Server是免费的开放源代码,它附带了高性能的HTTP服务器和反向代理。Ngi...

32380
来自专栏散尽浮华

linux下文件加密操作记录

为了安全考虑,通常会对一些重要文件进行加密备份或加密保存,下面对linux下的文件加密方法做一简单介绍: 一、 ZIP加密 1)文件加密 使用命令"zip -e...

365100
来自专栏酷玩时刻

开启全站HTTPS时代-Nginx SSL+tomcat集群

可以看看简书上的这篇文章写得比较详细《Let's Encrypt SSL证书配置》

19930
来自专栏小狼的世界

PHP使用DES进行加密和解密

DES是一种标准的数据加密算法,关于这个算法的详细介绍可以参考wiki和百度百科:

18720
来自专栏冷冷

Jasypt : 整合spring boot加密应用配置文件敏感信息

背景 我们的应用之前使用的是Druid数据库连接池,由于需求我们迁移到HikariCP连接池,druid 数据源加密提供了多种方式: 可以在配置文件my.pro...

53880
来自专栏玩转JavaEE

Spring Cloud Config服务端配置细节(二)之加密解密

在微服务架构中,由于独立的服务个数众多,加上前期测试工作量大,一些原本由运维人员维护的敏感信息会被我们直接写在微服务中,以提高开发效率,但是这种明文存储方式显然...

33940
来自专栏运维小白

Linux基础(day52)

12.17 Nginx负载均衡 Nginx负载均衡目录概要 vim /usr/local/nginx/conf/vhost/load.conf // 写入如下内...

26770

扫码关注云+社区

领取腾讯云代金券