欢迎各位兄弟 发布技术文章

这里的技术是共享的

You are here

ssh 原理及 指纹 fingerprint 异常处理 -o "StrictHostKeyChecking no" 有大用

sftp  -o "StrictHostKeyChecking no"  www@100.52.2.134 

sftp  -o "StrictHostKeyChecking no"  www@100.52.2.134 22

加上   -o "StrictHostKeyChecking no"  就不需要输入什么 yes 或 no 了


1、原理简介

ssh是一种网络协议,用于计算机的加密登陆,以及一些远程命令执行。

在linux常用指令中,ssh, scp都使用了ssh协议。

ssh协议是采用Rsa加密算法来实现的。

rsa加密算法是一处非对称加密算法,就是指该算法加密和解密使用不同的密钥,即使用加密密钥进行加密、解密密钥进行解密。 在RAS算法中,加密密钥(即公开密钥)PK是公开信息,而解密密钥(即秘密密钥)SK是需要保密的。

下面使用ssh协议实现登陆的流程来对协议进行说明:

(1)远程主机收到用户的登录请求,把自己的公钥发给用户。

(2)用户使用这个公钥,将登录密码加密后,发送回来。

(3)远程主机用自己的私钥,解密登录密码,如果密码正确,就同意用户登录。


那么为什么需要fingerprint呢?

这是由于ssh协议的实现机制决定的,ssh协议无法确认远程主机是不要告,出于安全的的考虑增加了fingerprint手动确认,让用户来自动确认主机的可靠怀。

如果有人截获了登录请求,然后冒充远程主机,将伪造的公钥发给用户,那么用户很难辨别真伪,而攻击者则可以通过用户请求获得远程主机的密码,登陆远程主机。这就是著名的中间人攻击。


2、ssh/scp 跳过首次连接远程主机的fingerprint

当首次ssh或者scp时,会收到系统的如下提示。

The authenticity of host '119.8.35.122 (119.8.35.122)' can't be established. ECDSA key fingerprint is SHA256:vAPUXtKvN3KmiGvq8XEtYUlBI47eiX6fvKp4EPwUm70. Are you sure you want to continue connecting (yes/no/[fingerprint])?

以上确认提示大意为:无法确认19.8.35.122主机的真实可靠性,它的rsa key的指纹是xxx,你是否希望继续连接到该机器?

一旦选择是,则机器19.8.35.122的rsa key就会保存到.ssh/known_hosts中,下次连接时,有了记录,就不会再有相应提示。

当管理的机器非常多时,每一台都需要手动确认是一件非常麻烦的事情,我们要以通过后面的方便来跳过确认。我们可以采用发下两种方式来路过fingerprint确认。出于安全考虑,本机制只建议在内网使用。


方式一:在命令行中添加 -o "StrictHostKeyChecking no" 

执行ssh或scp命令时,系统就会自动把远程主机的rsa key加入到.ssh/known_hosts文件中。

ssh -o "StrictHostKeyChecking no" root@host

StrictHostKeyChecking no|ask|yes:

    StrictHostKeyChecking代码了远程主机的host key确认方式。有如下几种设置。

    no代表不做任何确认,直接通过验证,把rsa加入到.ssh/known_hosts。

    ask为默认值,需要用户手动确认是否通过验证,是否把远程主机加入到.ssh/known_hosts中。

    yes为最高安全级别,如果本地没有相应的rsa key则会直接拒绝连接,并出给提示。


方式二:修改.ssh/config(或者/etc/ssh/ssh_config)配置后

配置文件修改后,将应用于所有ssh命令,不需要在单命令上指定StrictHostKeyChecking:

在.ssh/config(或者/etc/ssh/ssh_config)中增加如下配置:

StrictHostKeyChecking no


3、处理远程主机rsa key变动的情况

当远程主机的rsa key与本地对不上,则会收到报错。

@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@ @    WARNING: REMOTE HOST IDENTIFICATION HAS CHANGED!     @ @@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@ IT IS POSSIBLE THAT SOMEONE IS DOING SOMETHING NASTY! Someone could be eavesdropping on you right now (man-in-the-middle attack)! It is also possible that the RSA host key has just been changed. The fingerprint for the RSA key sent by the remote host is 50:e6:cb:58:bc:b7:a3:f6:e8:8f:46:a7:c1:5f:c2:df. Please contact your system administrator. Add correct host key in /home/cobyeah/.ssh/known_hosts to get rid of this message. Offending key in /home/cobyeah/.ssh/known_hosts:7 RSA host key for 192.168.0.4 has changed and you have requested strict checking. Host key verification failed.


我们有以下两个方法可以解决。

方法一:设置StrictHostKeyChecking no

方法二:删除.ssh/known_hosts中记录的与远程主机不匹配的rsa key。


4、参考文档

SSH原理与运用(一):远程登录 - 阮一峰的网络日志

解决ssh登录Host key verification failed - IMEIXI4EVER - 博客园

说说SSH、SCP和SFTP的那些事儿 - 云+社区 - 腾讯云

文章知识点与官方知识档案匹配,可进一步学习相关知识
普通分类: