ssh时提示:Permission denied (publickey,gssapi-keyex,gssapi-with-mic,password).

一、报错现象:
@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
@    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 a host key has just been changed.
The fingerprint for the ECDSA key sent by the remote host is
SHA256:bMb6rXY0m8C4h48ZogygNSmw85Dg6Z3SZWVpmyUWyag.
Please contact your system administrator.
Add correct host key in /root/.ssh/known_hosts to get rid of this message.
Offending ECDSA key in /root/.ssh/known_hosts:47
Password authentication is disabled to avoid man-in-the-middle attacks.
Keyboard-interactive authentication is disabled to avoid man-in-the-middle attacks.
Permission denied (publickey,gssapi-keyex,gssapi-with-mic,password).
二、SSH原理

SSH或Secure Shell,是一种通常通过命令行安全访问远程计算机的非常常用的方法。它旨在确保连接以及所有传递的数据都不会被窃听。为了达到这个目的,常见的SSH客户端(例如OpenSSH)内置了许多检查,以确保我们发起的连接的安全性不会受到损害。
这个问题是当我们通过SSH连接到服务器时,ssh将获得ECDSA密钥的指纹,然后将其保存到〜/ .ssh / known_hosts下的主目录中。这是在首次连接到服务器后完成的,并且将通过以下消息作出提示:

$ ssh ec2-user@ec2-xxx-xxx-1-1.compute-1.amazonaws.com
The authenticity of host 'ec2-xxx-xxx-1-1.compute-1.amazonaws.com (xxx.xxx.1.1)' can't be established.
ECDSA key fingerprint is SHA256:hotsxb/qVi1/ycUU2wXF6mfGH++Yk7WYZv0r+tIhg4I.
Are you sure you want to continue connecting (yes/no)? 

如果我们这时候输入“yes”,指纹将会保存到known_hosts文件,之后每次连接到该服务器时,SSH都会查询该文件
但是,如果自上次连接服务器以来,服务器的ECDSA密钥被更改了,会发生什么情况呢?服务器密钥发生变化是一种值得警惕的事件,因为这实际上可能意味着我们在不知情下正在连接到另一台服务器。如果这台新服务器是恶意的,则它将能够查看所有连接中发送和收到的的数据,任何拥有这台服务器的人都可以看到这些数据。这很可能是一种中间人攻击。因此ssh就会提示出上面的那个警告,告诉我们服务器的密钥与之前储存的不同。
当然,出现这个情况并非一定意味着我们被黑客攻击了,ECDSA密钥指纹更改服务器的原因很多。就我自己的经历而言,我在AWS上有一个弹性IP地址,并在重新部署我们的应用程序后将其分配给其他服务器。我连接到的IP地址和主机名相同,但是底层服务器不同,这也使得SSH客户端发出这个警告。

三、解决问题

在ssh主机的/root/.ssh/known_hosts文件里卖弄的记录删除掉或者注释掉就可以ssh连接到其他主机了。

1、进入known_hosts文件手动删除记录

在警告消息中,我们可以找到被修改过的ECDSA密钥在known_hosts文件中的位置的行。在我的示例中,该行表示“Offending ECDSA key in /Users/scott/.ssh/known_hosts:47”,即在第47行。 我们只需要打开警告消息中指定的known_hosts文件, 删除警告消息中指定的行即可。 通过删除这一行,本地的SSH客户端将不再有可比较的ECDSA密钥指纹,因此将在下次连接时再次要求您验证服务器的真实性,即相当于第一次链接。完成后,您将在此服务器的known_hosts文件中拥有一个新指纹,即服务器的当前指纹。
在这里插入图片描述
在这里插入图片描述

2、进行注释掉也行

在这里插入图片描述
在这里插入图片描述

3、使用ssh-keygen解决

另一种解决方案是使用ssh-keygen从known_hosts文件中删除有问题的密钥,这可以通过以下命令完成:

ssh-keygen -R [hostname-or-IP]
  • 1
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值