ssh认证流程步骤:

1.主机host_key认证

2.身份验证

3.身份验证通过

原理及更多知识点,请查看好友博客 http://www.cnblogs.com/f-ck-need-u/p/7129122.html

-------------------------------------------------------------------------------------------------------------------

1.主机host_key验证过程:(只需一次,此时服务端B-server持有的host_key为私钥,A-client持有的是来自B-server的公钥)

A-client要想链接到B-server,首先进行主机验证(host_key),判断本机以前是否链接过B-server,判断的标准是查看自身家目录下文件~/.ssh/known_hosts中内容,是否有B-server的主机信息host_key,如果没有该地址的host_key,则询问是否保存主机B发送过来的host_key,如果有,则将此文件中host key和主机B发送过来的host_key做比对,如果完全相同,则表示主机A曾经保存过主机B的host_key,无需再保存,直接进入下一个过程——身份验证,如果不完全相同(或者内容被修改过),则提示是否(重新)保存主机B当前使用的host_key。

~/.ssh/known_hosts     #<==A-client
/etc/ssh/known_hosts #<==B-server [test@A-client ~]$ ssh -p 52113 test@10.0.0.4
The authenticity of host '[10.0.0.4]:52113 ([10.0.0.4]:52113)' can't be established.
RSA key fingerprint is d4:82:8d:5c:83:52:e9:79:2c:e3:3f:6a:fd:eb:4b:21.
Are you sure you want to continue connecting (yes/no)? yes
Warning: Permanently added '[10.0.0.4]:52113' (RSA) to the list of known hosts.
test@10.0.0.4's password:
[test@B-server ~]$ logout
Connection to 10.0.0.4 closed.
[test@A-client ~]$ cat .ssh/known_hosts #<===在主机A上查看保存的host_key
[10.0.0.4]:52113 ssh-rsa AAAAB3NzaC1yc2EAAAABIwAAAQEAnmy+37PLTSWUlEp/t3c4xJoUFtZ1hlnMuXddxfeFM0x0Mq03y6vuaK8w6KY4V/VPTYuI3NeBHdVkBy2vQFba4O5uBU8GZJ+iyfnnL/klHKgrB2+Oq0mNbEATaJDOVbsIgjVUsPCTwSeVYfevkl9Zcd5QLgR0Hzr83y4iLvZcewosvxOnCE7dTXQQej1GCLpxZLSHhUg/gt9M3Z2KnqoFuSawVr3dIMzQrtlqAjixKmvDI/uGFHRAylflsXHdNyb+ggCSdsy84q9FfCND44KHWrLLLpupyA7ARE1O7TmGkLMhtWb8o09+7HV1n3rTi+3eJCTXTGE24f/OjDUdx8I+lQ==
说明:
1.每一行的行首是主机名,为搜索host_key时的索引
2.如果内容被修改过,则丢弃,重新询问是否保存
[root@B-server ~]# cat /etc/ssh/ssh_host_rsa_key.pub #<===在主机B上查看自身host_key(回应给其他请求链接的主机host_key)
ssh-rsa AAAAB3NzaC1yc2EAAAABIwAAAQEAnmy+37PLTSWUlEp/t3c4xJoUFtZ1hlnMuXddxfeFM0x0Mq03y6vuaK8w6KY4V/VPTYuI3NeBHdVkBy2vQFba4O5uBU8GZJ+iyfnnL/klHKgrB2+Oq0mNbEATaJDOVbsIgjVUsPCTwSeVYfevkl9Zcd5QLgR0Hzr83y4iLvZcewosvxOnCE7dTXQQej1GCLpxZLSHhUg/gt9M3Z2KnqoFuSawVr3dIMzQrtlqAjixKmvDI/uGFHRAylflsXHdNyb+ggCSdsy84q9FfCND44KHWrLLLpupyA7ARE1O7TmGkLMhtWb8o09+7HV1n3rTi+3eJCTXTGE24f/OjDUdx8I+lQ==
注意:
1.服务端使用的host_key是sshd服务启动时重新建立的,保存在/etc/ssh/ssh_host_rsa_key 文件中(私钥)和/etc/ssh/ssh_host_rsa_key.pub(公钥,主机验证)
2.ssh将host_key.pub公钥转换为指纹比对,以此验证双方的host_key指纹是否一致
[test@A-client ~]$ ssh-keygen -l -f .ssh/known_hosts
2048 d4:82:8d:5c:83:52:e9:79:2c:e3:3f:6a:fd:eb:4b:21 [10.0.0.4]:52113 (RSA) root@B-server ~]# ssh-keygen -l -f /etc/ssh/ssh_host_rsa_key.pub
2048 d4:82:8d:5c:83:52:e9:79:2c:e3:3f:6a:fd:eb:4b:21 /etc/ssh/ssh_host_rsa_key.pub (RSA) [test@A-client ~]$ ssh-keygen -lv -f .ssh/known_hosts
2048 d4:82:8d:5c:83:52:e9:79:2c:e3:3f:6a:fd:eb:4b:21 [10.0.0.4]:52113 (RSA)
+--[ RSA 2048]----+
| ..oo |
| ..o= o |
| o+o+ . |
| =.o. |
| . +E . |
| . . . |
| o . |
| . +. |
| ... +=o |
+-----------------+

2.身份验证,身份验证常见是公钥验证和密码验证,如果公钥验证通过,则无需进行密码验证;如果不使用公钥验证方法,就是密码验证,在上一步的基础上,输入远程用户的密码,密码正确则验证通过(基于用户,需每个用户单独验证;公钥验证一般由客户端生成密钥对,保留私钥,传送公钥给服务端;客户端如果再次分发公钥给自己,并传送私钥给服务端,以此可以实现双机互信)

相关文件:

~/.ssh/id_rsa           #<===私钥
~/.ssh/id_rsa.pub #<===公钥
在A-client上生成密钥对
[test@A-client ~]$ ssh-keygen -t rsa #<==指定-t参数,rsa为非对称密钥算法,生成密钥对
Generating public/private rsa key pair.
Enter file in which to save the key (/home/test/.ssh/id_rsa):
Enter passphrase (empty for no passphrase):
Enter same passphrase again:
Your identification has been saved in /home/test/.ssh/id_rsa.
Your public key has been saved in /home/test/.ssh/id_rsa.pub.
The key fingerprint is:
13:0d:da:79:84:8d:ef:14:ad:5b:09:20:45:c6:65:b0 test@A-client
The key's randomart image is:
+--[ RSA 2048]----+
| .+BB+. |
| =+B+ . |
| . E.o+ . |
| o+ o |
| So o |
| .o |
| |
| |
| |
+-----------------+
[test@A-client ~]$ ll .ssh/
总用量 12
-rw------- 1 test test 1675 1月 22 15:33 id_rsa #<==注意,私钥文件权限必须为600,如果权限不一致,会导致私钥解锁公钥失败
-rw-r--r-- 1 test test 395 1月 22 15:33 id_rsa.pub
-rw-r--r-- 1 test test 398 1月 22 12:03 known_hosts [test@A-client ~]$ ssh-copy-id -i "-p 52113 test@10.0.0.4" #<==传送公钥到B-server,注意加双引号
[test@A-client ~]$ ssh-copy-id -i .ssh/id_rsa.pub "-p 52113 test@10.0.0.5"
The authenticity of host '[10.0.0.5]:52113 ([10.0.0.5]:52113)' can't be established.
RSA key fingerprint is f4:0b:56:80:aa:99:67:74:2a:ce:34:b4:ab:1d:a7:40.
Are you sure you want to continue connecting (yes/no)? yes
Warning: Permanently added '[10.0.0.5]:52113' (RSA) to the list of known hosts.
test@10.0.0.5's password:
Now try logging into the machine, with "ssh '-p 52113 test@10.0.0.5'", and check in: .ssh/authorized_keys to make sure we haven't added extra keys that you weren't expecting
Now try logging into the machine, with "ssh '-p 52113 test@10.0.0.4'", and check in:
.ssh/authorized_keys
to make sure we haven't added extra keys that you weren't expecting.
ssh-copy-id的实质(查看cat /usr/bin/ssh-copy-id 脚本可知):
1.检测目标主机指定用户的家目录下,是否存在.ssh目录,没有则以700创建该目录
2.将本地的公钥,传送至目标主机的.ssh/下,并更改文件名为authorized_keys(sshd_config中定义),权限为600

3.基于公钥验证通过

[test@A-client ~]$ ssh -p 52113 10.0.0.4
Last login: Tue Jan 22 12:03:09 2019 from 10.0.0.2
[test@B-server ~]$ logout
Connection to 10.0.0.4 closed.
[test@A-client ~]$ ssh -p 52113 10.0.0.5
[test@C-server ~]$

ssh_key认证的更多相关文章

  1. Ssh_key免秘钥登录

    一,环境准备 1.1 操作系统 [root@manager ~]# cat /etc/redhat-release CentOS release 6.7 (Final) [root@manager ~ ...

  2. .NET Core中的认证管理解析

    .NET Core中的认证管理解析 0x00 问题来源 在新建.NET Core的Web项目时选择“使用个人用户账户”就可以创建一个带有用户和权限管理的项目,已经准备好了用户注册.登录等很多页面,也可 ...

  3. ASP.NET Core 中的那些认证中间件及一些重要知识点

    前言 在读这篇文章之间,建议先看一下我的 ASP.NET Core 之 Identity 入门系列(一,二,三)奠定一下基础. 有关于 Authentication 的知识太广,所以本篇介绍几个在 A ...

  4. Web APi之认证(Authentication)两种实现方式【二】(十三)

    前言 上一节我们详细讲解了认证及其基本信息,这一节我们通过两种不同方式来实现认证,并且分析如何合理的利用这两种方式,文中涉及到的基础知识,请参看上一篇文中,就不再叙述废话. 序言 对于所谓的认证说到底 ...

  5. Android 指纹认证

    安卓指纹认证使用智能手机触摸传感器对用户进行身份验证.Android Marshmallow(棉花糖)提供了一套API,使用户很容易使用触摸传感器.在Android Marshmallow之前访问触摸 ...

  6. 全网独家MongoDB Certified DBA Associate考试认证视频

    该视频意在让所有学员一次通过考试,避免重复考试而承担的巨额考试费用! 目前MongDB发展迅猛,有赶超mysql,和oracle看齐的苗头.在这个时候MongoDB也适时的推出了官方的认证考试&quo ...

  7. Linux 利用Google Authenticator实现ssh登录双因素认证

    1.介绍 双因素认证:双因素身份认证就是通过你所知道再加上你所能拥有的这二个要素组合到一起才能发挥作用的身份认证系统.双因素认证是一种采用时间同步技术的系统,采用了基于时间.事件和密钥三变量而产生的一 ...

  8. MVC5 - ASP.NET Identity登录原理 - Claims-based认证和OWIN

    在Membership系列的最后一篇引入了ASP.NET Identity,看到大家对它还是挺感兴趣的,于是来一篇详解登录原理的文章.本文会涉及到Claims-based(基于声明)的认证,我们会详细 ...

  9. "用户增长"--快速身份认证实现用户增长的技术和产品方案

    "用户增长"--快速身份认证实现用户增长的技术和产品方案 1   引言 作为一个互联网产品,用户量的增长是一个非常重要的衡量指标. 这是一个集合了销售,市场,运营,技术的综合能力. ...

随机推荐

  1. Kafka日志压缩剖析

    1.概述 最近有些同学在学习Kafka时,问到Kafka的日志压缩(Log Compaction)问题,对于Kafka的日志压缩有些疑惑,今天笔者就为大家来剖析一下Kafka的日志压缩的相关内容. 2 ...

  2. 设置java启动项目

    1,

  3. webpack进阶用法你都get到了么?

    如何消除无用代码:打包自己的私有js库:实现代码分割和动态import提升初次加载速度:配置eslint规范团队代码规范:打包异常抓捕你都get到了么? 摇树优化:Tree Shaking webpa ...

  4. IDEA中springboot的热部署

    在pom.xml文件中添加依赖 <!--添加热部署--> <dependency> <groupId>org.springframework.boot</gr ...

  5. IDEA工具java开发之 代码生成Generate

    ◆生成set/get ◆生成构造函数 ◆生成toString ◆生成hashCodes和equals

  6. 深入理解Java虚拟机:JVM高级特性与最佳实践

    第一部分走近Java第1章走近Java21.1概述21.2Java技术体系31.3Java发展史51.4Java虚拟机发展史91.4.1SunClassicExactVM91.4.2SunHotSpo ...

  7. SQLException:The server time zone

    报错信息如下: java.sql.SQLException: The server time zone value 'Öйú±ê׼ʱ¼ä' is unrecognized or represen ...

  8. 前端url参数中带有callback并产生错误

    错误截图: 初步诊断是由于后端返回值的数据格式不正确造成的 解决方式: 1).接受在springmvc中接受callback参数 2).将对象转为Object 3).拼接callback方法,其中返回 ...

  9. Android教程2020 - RecyclerView显示多种item

    Android教程2020 - 系列总览 本文链接 前面我们已经用RecyclerView显示一些数据.也知道如何获取滑动的距离. 前面我们的列表中显示的都是同类数据.如果要在一个列表中显示不同类别的 ...

  10. ROC 曲线

    Receiver Operating Characteristic (接收机操作特性曲线) 是以虚警率为横轴,以击中率为纵轴,长成如下模样: 所谓击中率(hit)是指将正样本判断为正样本的比例,而虚警 ...