ssh登录提示RSA Host key认证失败的解决方法

【问题描述】

今天用ssh命令登录一台此前连接过的服务器,失败,出现下面的错误提示

【问题分析】

从提示看,很明显,是RSA key不匹配。

根据提示查看本机/home/user/.ssh/目录下,查看有如下3只文件:

id_rsa

id_rsa.pub

known_hosts

从文件名及查看文件内容可以看出:

1,前两个是用ssh-keygen命令生成的私钥和公钥;

2,known_hosts是ssh访问过的PC的公钥记录,当下次访问相同PC时ssh会核对公钥,如果不同则发出警告,避免受到DNS Hijack攻击;

从我们遇到的错误看,明显是known_hosts出了问题。

【解决方法】

1,删除/home/user/.ssh/目录下的known_hosts文件:

简单粗暴,如果想快速解决这个问题,可以采用

2,修改known_hosts内容:

根据上面截图中的提示

Offending RSA key in /home/user/.ssh/known_hosts:6

意思是,known_hosts文件的第6行发生冲突,因此,有两个方法:

(1)删除此行所记录的公钥:

删除后的效果,其实等同于方法1,删除后再次连接时会记录新的公钥;

(2)将此行所记录的公钥替换为想连接的PC的公钥:

对比了对方PC上的/home/user/.ssh/id_rsa.pub文件,发现和成功连接所生成存放在known_host中的公钥有差异,所以放弃这个方法。

但可以用上述方法(1)中生成的公钥的替换,如果你想来回倒腾下的话,其实结果和方法(1)相同;

其他博客里有介绍修改ssh配置的两种方法,但我尝试下来都失败了,不过,仍然分享在这里,如果有兴趣研究的话,可以研究下失败原因

1,修改/etc/ssh/sshd_config

PermitRootLogin no修改为yes,
PubkeyAuthentication yes修改为no
AuthorizedKeysFile %h .ssh/authorized_keys前面加上#屏蔽掉,
PasswordAuthentication no修改为yes

2,修改/etc/ssh/ssh_config

#  StrictHostKeyChecking ask 
改成
StrictHostKeyChecking no

【备注信息】

最后,附上ssh连接的认证原理:

公钥:用于加密,存在于服务器
私钥:用于解密,存在于客户机

认证流程:
1,客户端向服务器发出连接请求
2,服务器查看客户端公钥(~/.ssh/authorized_keys)该客户机(客户机标志:用户@Host)对应的公钥
3,服务器验证公钥合法,则产生一条随机数(challenge),用公钥加密发送给客户端
4,客户端用私钥解密回传服务器端。
5,随机数一致,认证通过
--------------------- 
作者:thdsea4 
来源:CSDN 
原文:https://blog.csdn.net/thdsea4/article/details/74942327?utm_source=copy 
版权声明:本文为博主原创文章,转载请附上博文链接!

你可能感兴趣的:(Linux)