非对称密钥算法诸如RSA、ECDSA等在证书管理方面有着广泛的应用,在使用的很频繁的ssh命令执行时首次就会用到,这篇文章将通过首次登录信息中密钥指纹信息的来龙去脉,说明证书公钥在ssh认证中的作用。

首次连接的信息示例

首次连接某台机器,可能会如下示例信息:

liumiaocn:~ liumiao$ ssh host121
The authenticity of host '[127.0.0.1]:21122 ([127.0.0.1]:21122)' can't be established.
ECDSA key fingerprint is SHA256:y9ir2Jbc7kNZPhP9h/O9juUZbTmGDo6NZi2IZnLwg0s.
Are you sure you want to continue connecting (yes/no)?

可以看到这是名为host121的机器,实际上是在127.0.0.1的本机上在21122进行的端口连接。上述提示的信息是说这台目标机器的SHA256密钥指纹是y9ir2Jbc7kNZPhP9h/O9juUZbTmGDo6NZi2IZnLwg0s,是否需要继续连接。根据操作系统的不同,有时也会同时显示SHA256和MD5方式的指纹信息,比如:

[root@host121 ssh]# ssh 192.168.163.121
The authenticity of host '192.168.163.121 (192.168.163.121)' can't be established.
ECDSA key fingerprint is SHA256:y9ir2Jbc7kNZPhP9h/O9juUZbTmGDo6NZi2IZnLwg0s.
ECDSA key fingerprint is MD5:d5:e7:dc:b3:21:06:5a:e5:c0:f7:a4:60:f7:59:d4:48.
Are you sure you want to continue connecting (yes/no)?

关于密钥指纹

密钥指纹实际上是非对称加密算法的公钥的应用,在这里它用来表示登录对象机器的身份,比如此处算法使用的是ECDSA,显示的指纹密钥实际上就是对使用ECDSA算法产生的公钥文件再次进行SHA256算法进行摘要,从而形成代表服务器身份的数字指纹,在登录的时候,向用户提示此指纹信息,表示和此机器建立连接,相当于要求用户对此证书信息进行确认。

确认流程和方式

在实际的场景中此问题简单的多,如果碰到了类似的ssh的身份认证连接,担心是否真正连接到目标机器,一般目标机器的提供者应同时提供此指纹信息。这里以IP为192.168.163.121的虚拟机的ssh首次连接为例,说明上述指纹信息的来源

ECDSA的公钥信息

前面提到过此提示信息实际上述ECDSA公钥的摘要内容,首先确认此公钥文件的内容信息,有如下两种方式可以进行确认:

  • 方法1: 直接确认公钥文件内容
    在机器安装的时候,缺省会在/etc/ssh目录下生成基于RSA、ECDSA等算法的公钥和私钥文件,直接使用cat命令显示文件内容即可
[root@host121 ssh]# pwd
/etc/ssh
[root@host121 ssh]# ls
moduli      sshd_config         ssh_host_ecdsa_key.pub  ssh_host_ed25519_key.pub  ssh_host_rsa_key.pub
ssh_config  ssh_host_ecdsa_key  ssh_host_ed25519_key    ssh_host_rsa_key
[root@host121 ssh]# cat ssh_host_ecdsa_key.pub
ecdsa-sha2-nistp256 AAAAE2VjZHNhLXNoYTItbmlzdHAyNTYAAAAIbmlzdHAyNTYAAABBBEy3w5004yyzNA8dXo1vo67E63tZybV88SiDupDfnHzHCeZ4tHjNqdabc9Fa+Jwwe5uIjcUFb+Ag4HaBjK4982U=
[root@host121 ssh]# cat ssh_host_rsa_key.pub
ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABAQC/pnteFxnI3Rk8OHVqJeIq83umem5/2VKjkZ7JJKi4wPJVYCrRBySPWdTs0V/T+sZdtF8LWmDw8yKuIYmb0yOm3d+3eFnQKVCtEcnP/Ctyuenha1o2PYzTv/4fjZX5Rf8SBXw6MbrHLE2ctjbhWrhQ6gbZ7C8fU82YS/EoWG2uk3XtRq0Ua6s5v9f1x3HV8PsDycrgQG99bw4Gr4dJ8u5a3MzpNtLS5Df7JlES683AoER1RHxmg+BP4zvXS2ePDhMr7gHi/fI35UMH78K/FJQu9oj46WUHkwWrOr2SbvKJLHy9GkDBLDj9EH8Tp4u+EVRqyH9Dsn1RJ9NOzxrEYtXl
[root@host121 ssh]#
  • 方法2: 使用ssh-keyscan命令
    使用ssh-keyscan命令可以直接在客户端上获得相同信息:
liumiaocn:~ liumiao$ ssh-keyscan -t ECDSA -p 21122 127.0.0.1
# 127.0.0.1:21122 SSH-2.0-OpenSSH_7.4
[127.0.0.1]:21122 ecdsa-sha2-nistp256 AAAAE2VjZHNhLXNoYTItbmlzdHAyNTYAAAAIbmlzdHAyNTYAAABBBEy3w5004yyzNA8dXo1vo67E63tZybV88SiDupDfnHzHCeZ4tHjNqdabc9Fa+Jwwe5uIjcUFb+Ag4HaBjK4982U=
liumiaocn:~ liumiao$ ssh-keyscan -t RSA -p 21122 127.0.0.1
# 127.0.0.1:21122 SSH-2.0-OpenSSH_7.4
[127.0.0.1]:21122 ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABAQC/pnteFxnI3Rk8OHVqJeIq83umem5/2VKjkZ7JJKi4wPJVYCrRBySPWdTs0V/T+sZdtF8LWmDw8yKuIYmb0yOm3d+3eFnQKVCtEcnP/Ctyuenha1o2PYzTv/4fjZX5Rf8SBXw6MbrHLE2ctjbhWrhQ6gbZ7C8fU82YS/EoWG2uk3XtRq0Ua6s5v9f1x3HV8PsDycrgQG99bw4Gr4dJ8u5a3MzpNtLS5Df7JlES683AoER1RHxmg+BP4zvXS2ePDhMr7gHi/fI35UMH78K/FJQu9oj46WUHkwWrOr2SbvKJLHy9GkDBLDj9EH8Tp4u+EVRqyH9Dsn1RJ9NOzxrEYtXl
liumiaocn:~ liumiao$

生成密钥指纹

使用如下命令即可根据公钥文件生成密钥指纹(摘要信息):

生成SHA256方式密钥指纹(ECDSA):ssh-keygen -E sha256 -lf /etc/ssh/ssh_host_ecdsa_key.pub

生成MD5方式密钥指纹(ECDSA):ssh-keygen -E md5 -lf /etc/ssh/ssh_host_ecdsa_key.pub

执行日志示例如下所示:

[root@host121 ssh]# ssh-keygen -E sha256 -lf /etc/ssh/ssh_host_ecdsa_key.pub
256 SHA256:y9ir2Jbc7kNZPhP9h/O9juUZbTmGDo6NZi2IZnLwg0s no comment (ECDSA)
[root@host121 ssh]# ssh-keygen -E md5 -lf /etc/ssh/ssh_host_ecdsa_key.pub
256 MD5:d5:e7:dc:b3:21:06:5a:e5:c0:f7:a4:60:f7:59:d4:48 no comment (ECDSA)
[root@host121 ssh]#

可以看到ssh首次连接时提示的密钥指纹信息了。

总结

ssh首次连接时写到know_hosts中的密钥指纹信息的来源是对目标机器的公钥进行数字摘要算法而得出的,结合流程可以预防中间人攻击。

SSH基础:ssh首次连接的公钥认证相关推荐

  1. 03 | ssh基础知识,连接服务器的那些事

    前言 前言:ssh 知识汇总 文章目录 前言 一.一台服务器包括什么 二.ssh 与 scp 命令 三.服务器的远程登录和退出 1.给服务器配置别名 1)为什么要配置服务器别名?(Why) 2)配置步 ...

  2. SSH自动输入密码,取消首次连接确认

    SSH是最常用的工具了,ssh username@ipAddress 即发起到远程主机的访问.随后输入远程机器的密码即可连接,同时,首次连接到远程主机还会要求获得远程主机的公钥,这时必须手动输&quo ...

  3. 使用SecureCRT设置linux系统登录的ssh公钥认证

    使用SecureCRT设置linux系统登录的ssh公钥认证 linux系统环境:CentOS 5.8 1.修改ssh配置文件/etc/ssh/sshd_config RSAAuthenticatio ...

  4. SSH基础:启用调试模式确认连接过程

    在ssh命令中可以通过-v选项直接开启调试模式,在连接的过程中将根据设定的调试等级输出对应的信息,这篇文章以确认ssh首次连接的动作为例,说明调试模式的使用方式. 调试模式 ssh命令中,调试模式有三 ...

  5. ssh配置公钥_如何使用公钥认证免密码ssh远程登录Linux服务器

    1. Windows免密码登录Linux服务器 请关注本头条号,每天坚持更新原创干货技术文章. 如需学习视频,请在微信搜索公众号"智传网优"直接开始自助视频学习 新建用户密钥生成向 ...

  6. mac下如何使用ssh-copy-id完成ssh的公钥认证登录

    ssh-copy-id 是Linux 一个标准的命令行程序,用来时,实现公钥认证的ssh登陆. 在Linux下使用ssh-copy-id 可以轻松地实现本机到远程主机的公钥认证的ssh登录: ssh- ...

  7. Linux基础——SSH远程连接

    简介 1.Ssh 是一种安全通道协议,主要用来实现字符界面的远程登录,远程复制等功能. 2.OpenSSH 是实现SSH软件的开源软件项目 结构 C/S结构:客户机和服务器结构,是软件体系结构. B/ ...

  8. SSH基本简介及连接交互过程

    简介: SSH(Secure+SHell):是一种网络协议,顾名思义,就是非常安全的shell,主要用于计算机间的加密传输. SSH服务基于非对称加密(public-key cryptograthy, ...

  9. 【vscode】ssh通过跳板机连接内网服务器

    以防自己忘记.. 跟着下面的步骤 step 1 本地生成密钥 生成自己电脑的公钥和私钥 ssh-keygen -t ed25519 会跳出几个步骤,第一个是指定路径用的,可以直接回车:后两个步骤是设置 ...

  10. ssh 使用秘钥连接服务器

    以下纯属个人记录,使用 ssh 秘钥方式连接服务器,比密码认证更加安全 还是先给一下学习的教程 ssh 连接服务器设置  这里是在 linux 系统上使用 如果要使用 ssh 连接服务,首先我们需要生 ...

最新文章

  1. 多线程基础与JUC进阶笔记
  2. 移动领域大话三国(Android/IOS/WP7)之英雄过招
  3. FPGA开发经验谈-FPGA 设计的四种常用思想与技巧(二)
  4. 基于visual Studio2013解决面试题之0702输出数字
  5. Android 系统(218)---Android的事件分发机制以及滑动冲突的解决
  6. 连载:面向对象的葵花宝典:思维、技能与实践(40) - DECORATOR模式
  7. C++ 类 class 构造函数 : 成员赋值 父类提前构造
  8. iOS 实现Lottie动画
  9. 【MATLAB生信分析】MATLAB生物信息分析工具箱(二)
  10. 常见的颜色搭配、衣裤搭配指南
  11. oracle中的||是什么意思?
  12. 使用Bandwagon服务器ftp解决git clone速度慢的问题
  13. cv曲线面积的意义_南昌大学陈义旺、武汉大学闵杰《AFM》:大面积有机太阳能电池中一种减少非辐射复合损耗的有效方法...
  14. 免费网贷大数据_免费查网贷大数据的app
  15. 记lrd的高二上学期第五次调研考试
  16. Leetcode 977.有序数组的平方
  17. 技术文摘5 发展 礼品
  18. 1.在表格中操作时间,对时间格式转化,2.自定义规则验证身份证号
  19. 服务器磁盘爆满,好捉急呀,如何清理MySQL日志?
  20. 一个屌丝程序猿的人生(一百)

热门文章

  1. android nexus 刷机工具包,Nexus5刷机救砖Recovery详细教程
  2. linux安装razer鼠标驱动
  3. 那些年的 Hello World (HTML)
  4. 一篇文章看懂Yandex SEO:俄罗斯外贸从这里开始
  5. PID算法的简单了解
  6. java和mysql实现点餐功能_java+mysql餐馆点餐系统的设计与开发
  7. open ai gpt_GPT-3:第一个人工智能?
  8. “梦回三国”系列总结
  9. Java 判断输入的是否为元音字母
  10. 按压式按摩靠背的设计