验证远程主机SSH指纹
转自:https://marskid.net/2018/02/05/how-to-verify-ssh-public-key-fingerprint/
使用SSH进行远程连接新的主机的时候,经常会看到一个提示:
$ ssh 127.0.0.1
The authenticity of host '127.0.0.1 (127.0.0.1)' can't be established.
ECDSA key fingerprint is SHA256:QUfCwW6Br5EwwESsulN2TEidBoDNca888RNflZG++bI.
Are you sure you want to continue connecting (yes/no)? yes
如果输入yes
确认,那么服务器SSH公钥会添加到~/.ssh/known_hosts
里面。虽然知道这是一个验证步骤,但是应该怎样验证?其中原理又是什么?
$ cat ~/.ssh/known_hosts
|1|DdBYclZ+pUHyoiLC2zjmf5Efb4Y=|fdd5RRy2SV0775av/4ktZr30aI8= ecdsa-sha2-nistp256 AAAAE2VjZHN.........K+/urI+pGmsSDz6O5PY=
第一次连接SSH有提示ECDSA类型的公钥指纹,因为指纹比公钥的长度要短,所以更容易比较。
SHA256:QUfCwW6Br5EwwESsulN2TEidBoDNca888RNflZG++bI
这个指纹也可以通过ssh-keyscan
命令结合ssh-keygen
得到。ssh-keyscan
命令可获取服务器公钥,而 ssh-keygen
命令可以计算公钥的指纹。只要计算一下服务器上的相应公钥的指纹,并与客户端获取的指纹进行比对一致,就能确定连接的是公钥对应的服务器。
先在客户端获取服务器公钥:
$ ssh-keyscan -t ECDSA -p 22 127.0.0.1
# 127.0.0.1:22 SSH-2.0-OpenSSH_7.2p2 Ubuntu-4ubuntu2.4
127.0.0.1 ecdsa-sha2-nistp256 AAAAE2VjZHN.........K+/urI+pGmsSDz6O5PY=
可以看到这个公钥与写入known_hosts
文件是一致的。
那么这个公钥从哪里来,怎么确认与服务器的连接是正确的?
可以通过ssh-keygen
命令获取公钥的指纹,可通过-E参数指定指纹的类型。
$ ssh-keygen -E sha256 -lf ~/.ssh/known_hosts
256 SHA256:QUfCwW6Br5EwwESsulN2TEidBoDNca888RNflZG++bI |1|DdBYclZ+pUHyoiLC2zjmf5Efb4Y=|fdd5RRy2SV0775av/4ktZr30aI8= (ECDSA)
有的SSH终端默认提供MD5格式的公钥指纹。
$ ssh-keygen -E md5 -lf ~/.ssh/known_hosts
256 MD5:e6:f0:2b:fa:23:fb:fe:0d:1d:de:2c:71:70:ea:fe:f9 |1|DdBYclZ+pUHyoiLC2zjmf5Efb4Y=|fdd5RRy2SV0775av/4ktZr30aI8= (ECDSA)
这样就方便与服务器的指纹进行比较,虽然直接比较公钥是否相同也可以。
进入服务器,可看到/etc/ssh/
目录下有几种密钥,这些文件在安装openssh-server后生成。SSH服务就是使用这些密钥与客户端进行加密通信。
$ ls -1 /etc/ssh/ssh_host*
/etc/ssh/ssh_host_dsa_key
/etc/ssh/ssh_host_dsa_key.pub
/etc/ssh/ssh_host_ecdsa_key
/etc/ssh/ssh_host_ecdsa_key.pub
/etc/ssh/ssh_host_ed25519_key
/etc/ssh/ssh_host_ed25519_key.pub
/etc/ssh/ssh_host_rsa_key
/etc/ssh/ssh_host_rsa_key.pub
根据终端的提示,选择ECDSA进行比较。可在服务器通过下面的命令生成服务器的公钥指纹摘要,这是可信的基础。
$ ssh-keygen -E sha256 -lf /etc/ssh/ssh_host_ecdsa_key.pub
256 SHA256:QUfCwW6Br5EwwESsulN2TEidBoDNca888RNflZG++bI root@localhost (ECDSA)
这是MD5格式。
$ ssh-keygen -E md5 -lf /etc/ssh/ssh_host_ecdsa_key.pub
256 MD5:e6:f0:2b:fa:23:fb:fe:0d:1d:de:2c:71:70:ea:fe:f9 root@localhost (ECDSA)
可以在客户端使用如下命令通过网络获取服务器的公钥指纹摘要。
$ ssh-keyscan -t ECDSA -p 22 127.0.0.1 2>/dev/null | ssh-keygen -E sha256 -lf -
256 SHA256:QUfCwW6Br5EwwESsulN2TEidBoDNca888RNflZG++bI 127.0.0.1 (ECDSA)
这是MD5格式。
$ ssh-keyscan -t ECDSA -p 22 127.0.0.1 2>/dev/null | ssh-keygen -E md5 -lf -
256 MD5:e6:f0:2b:fa:23:fb:fe:0d:1d:de:2c:71:70:ea:fe:f9 127.0.0.1 (ECDSA)
可以看到,在服务器上直接生成的
256 SHA256:QUfCwW6Br5EwwESsulN2TEidBoDNca888RNflZG++bI root@localhost (ECDSA)
与客户端获取的
256 SHA256:QUfCwW6Br5EwwESsulN2TEidBoDNca888RNflZG++bI 127.0.0.1 (ECDSA)
公钥指纹是一致的,并且~/.ssh/known_hosts
文件中的对应主机的公钥也与服务器相应类型的公钥一致。可以据此判断SSH建立的连接是正确的。
验证远程主机SSH指纹的更多相关文章
- 【Hadoop系列】linux下 root用户免密码登录远程主机 ssh
SSH原理:[Hadoop系列]linux SSH原理解析 操作环境: CentOS 6.5 操作对象: 用户A主机和远程主机B 正文部分:斜体加粗代表linux指令. linux下 非root用户免 ...
- 构建秘钥对验证的SSH体系
构建秘钥对验证的SSH 体系 首先先要在ssh 客户端以root用户身份创建秘钥对 客户端将创建的公钥文件上传至ssh服务器 服务器将公钥信息导入用户root的公钥数据库文件 客户端以root用户身份 ...
- JGit与远程仓库链接使用的两种验证方式(ssh和https)
JGit是使用JAVA的API来操控Git仓库的库,由Eclipse公司维护.他提供的API分成两个层次,底层命令和高层命令.底层API是直接作用于低级的仓库对象,高层的API是一个面向普通用户级别功 ...
- CentOS 配置远程主机ssh免密登录
ssh针对的是用户不是机器,同一机器不同用户需要单独配置ssh,才能实现该用户的免密登录 cd ~ cd ./.ssh 在./ssh目录下生成公钥与私钥(如果没有.ssh先使用ssh命令连接到一台远程 ...
- 使用ssh连接远程主机
在linux系统中,ssh是远程登录的默认工具,因为该工具的协议使用了RSA/DSA的加密算法.该工具做linux系统的远程管理是非常安全的. ssh登录远程主机(服务器)一般有两种方式:无密钥方式 ...
- Ansible批量更新远程主机用户密码 (包括Ansible批量做ssh互信)
按照集团运维信息安全制度, 需要每个一段时间对线上服务器密码进行一次变更,通过shell脚本部署比较繁琐,所以决定采用ansible脚本对远程主机root密码进行批量重置,该脚本已经在稳定运行在正式环 ...
- Linux登录验证机制、SSH Bruteforce Login学习
相关学习资料 http://files.cnblogs.com/LittleHann/linux%E4%B8%AD%E7%94%A8%E6%88%B7%E7%99%BB%E5%BD%95%E8%AE% ...
- iOS - (个人隐私钱包调用系统本机TouchID指纹锁验证)
// // ViewController.m // TouchID指纹验证 // // Created by apple on 16/9/18. // Copyright © 2016年 ap ...
- iOS 指纹解锁 验证TouchID
iOS指纹解锁 1.首先,引入依赖框架 LocalAuthentication.framework #import <LocalAuthentication/LocalAuthenticatio ...
随机推荐
- css选择器思维导图
- Docker(2):快速入门及常用命令
什么是Docker? Docker 是世界领先的软件容器平台.开发人员利用 Docker 可以消除协作编码时“在我的机器上可正常工作”的问题.运维人员利用 Docker 可以在隔离容器中并行运行和管理 ...
- Python中读取文件中的json串,并将其写入到Excel表格中
Json:JavaScript Objective Notation,是一种轻量级的数据交换格式.Json最广泛的应用是作为AJAX中web服务器和客户端的通讯的数据格式.现在也常用语http请求中, ...
- 莫烦tensorflow(3)-Variable
import tensorflow as tf state = tf.Variable(0,name='counter') one = tf.constant(1) new_value = tf.ad ...
- [转]JavaScript与元素间的抛物线轨迹运动
在张鑫旭的博客看到这个抛物线的小动画,觉得很感兴趣,转载一下方便研究~ 原文地址:http://www.zhangxinxu.com/wordpress/?p=3855 在页面上添加元素的位移动画,除 ...
- wx小程序功能总结
注:1. 微信默认的宽度为750rpx , 不会变化. 2.bindtap 绑定触摸事件,可冒泡 catchtap 绑定触摸事件,不可冒泡 1.唤出系统菜单 2.上传图片 showSelection( ...
- react-navigation 使用详解(转载)
上篇博客和大家分享了关于React Native jsBundle预加载,界面启动优化的内容,详情可点击: 基于最新版本React Native实现JsBundle预加载,界面秒开优化 一.开源库介绍 ...
- [转]springcloud(九):配置中心和消息总线(配置中心终结版)
https://www.cnblogs.com/ityouknow/p/6931958.html springcloud(九):配置中心和消息总线(配置中心终结版) 我们在springcloud(七) ...
- js Promise fetch demo
<html> <head> <title></title> </head> <body> </body> <s ...
- [转载]PT建站源码(PT服务器原程序)汇总(20100815更新)
Tbsource官方网站(已失效):http://www.tbsource.com/下载地址:http://www.ipv6bbs.com/thread-5152-1-1.html使用站点:CCFbi ...