ChatGPT解决这个技术问题 Extra ChatGPT

ssh remote host identification has changed

I've reinstalled my server and I am getting these messages:

[user@hostname ~]$ ssh root@pong
@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
@    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 RSA key sent by the remote host is
6e:45:f9:a8:af:38:3d:a1:a5:c7:76:1d:02:f8:77:00.
Please contact your system administrator.
Add correct host key in /home/hostname /.ssh/known_hosts to get rid of this message.
Offending RSA key in /var/lib/sss/pubconf/known_hosts:4
RSA host key for pong has changed and you have requested strict checking.
Host key verification failed.

I have tried various solutions that I found on the Internet. My known_hosts file (normally in ~/.ssh/known_hosts) is in /var/lib/sss/pubconf/known_hosts. I've tried to edit it, but it remains in one state. I have installed ipa-client and have Fedora 19. How do I resolve this warning?

All the answers answered so far work only if you do not have Freeipa installed.

The right answer for freeipa in comments below from adrin is here.

just found out hard way that this problem can also happen if you have ip address conflict nslookup your ip to debug this issue more
There is a deadlock here. This one is marked duplicate so no one can add answer and the one it links is marked off topic so no can add answer there as well. If you delete the known_hosts, it will fix the issue as well.
I had the same problem. For the sake of mine and others, here's the question and my answer to it: superuser.com/questions/1071204/…
As someone looking to verify their key first I found this answer useful. askubuntu.com/a/83499/620623
As sharrajesh mentions: check your DNS entries (in FreeIPA for me) and see you don't have multiple A entries with IPs that are not reachable from the network.

P
Pablo Bianchi

Here is the simplest solution

ssh-keygen -R <host>

For example,

ssh-keygen -R 192.168.3.10

From ssh-keygen man page:

-R hostname Removes all keys belonging to hostname from a known_hosts file. This option is useful to delete hashed hosts (see the -H option above).


I am on Windows and this solution, nor does removing key, work, what else can I try?
Alright, turns out on Windows I need to use terminal from git bash for this (or any MingW32 terminal). Tricky.
keep in mind that if you connected via a specific port, you might have to remove with syntax like ssh-keygen -R [127.0.0.1]:3022. Just check your .ssh/known_hosts file for what it explicitly says.
When I try this I get the error " not found in ~/.ssh/known_hosts"
<host> should be used with the exact value from the error message, in single quotes for shell-escaping. e.g.: ... host key for [example.com]:3422 has changed ... becomes ssh-keygen -R '[example.com]:3422'
J
Jinna Balu

Use

ssh-keygen -R [hostname]

Example with an ip address/hostname would be:

ssh-keygen -R 168.9.9.2

This will update the offending of your host from the known_hosts. You can also provide the path of the known_hosts with -f flag.


Removing corresponding key $ ssh-keygen -R {server.name.com} | $ ssh-keygen -R {ssh.server.ip.address} | $ ssh-keygen -R server.example.com
How does an answer without explanation get so much upvotes.. no security concerns, no explanation.... -1
It also seems just like a copy of the other answer below. Please a mod clean this mess up...
Hostname clear example: ssh-keygen -R '[localhost]:2222'
@DanielW. The answer from April 18, 2014 originally had less content but was later edited.
w
warvariuc

I had this same error occur after I recreated a Digital Ocean Ubuntu image. I used the following command with my server IP in place of [IP_ADDRESS]

ssh-keygen -R [IP_ADDRESS]

Thank you so much! I was using the host name and it only worked with the IP_ADDRESS :)
This did it for me and should be the accepted answer. I don't know why there are two copies of this answer that came later and both have more upvotes.
Yours was not the same error; your server wasn't running SSSD. See the OP.
A
Andy Hayden

The sledgehammer is to remove every known host in one fell swoop:

rm ~/.ssh/known_hosts

I come up against this as we use small subnets of short-lived servers from a jump box, and frequently have internal IP address reuse of servers that share the same ssh key.


Worked for me on a vagrant VM when the accepted answer didn't work.
Useful tool to have in the belt, but this could open you up for a MitM attack (the exact thing that known_hosts is meant to prevent). Only do this if you are confident that all of the hosts in there are safe.
This worked for me as well, after that I created host file again by running ssh sshuser@, thanks
m
mockinterface

When you reinstall the server its identity changes, and you'll start to get this message. Ssh has no way of knowing whether you've changed the server it connects to, or a server-in-the-middle has been added to your network to sniff on all your communications - so it brings this to your attention.

Simply remove the key from known_hosts by deleting the relevant entry:

sed '4d' -i /var/lib/sss/pubconf/known_hosts

The 4d is on the account of Offending RSA ...known_hosts:4


Thanks, but I don't know why, but I remove it and it is in it again. I have tries stop sssd service and this effect gone, but after starting sssd, it appears again.
Backup your ~/.ssh directory and then delete it. Does your service keeps re-adding the keys after ~/.ssh was blown away?
I have renamed .ssh to .ssh_old, after new try to connect it just create empty directory .ssh. And I still can't make /var/lib/sss/pubconf/known_hosts "editable".
The more portable way to do this: sed -i -e 4d /var/lib/sss/pubconf/known_hosts
How do you backup the server's identification in the event that you wish to rebuild the server without causing disruptions like this error message?
A
Alex

Here's simplest solution

Use ssh-keygen to delete the invalid key

ssh-keygen -R "you server hostname or ip"

Hope it be help you


what if my server name is localhost, and the following command gives Host localhost not found in /home/user/.ssh/known_hosts? ok, it was supposed to be ssh-keygen -R [localhost]:port
f
fIwJlxSzApHEZIl

The problem is that you've previously accepted an SSH connection to a remote computer and that remote computer's digital fingerprint or SHA256 hash key has changed since you last connected. Thus when you try to SSH again or use github to pull code, which also uses SSH, you get an error. Why? Because you're using the same remote computer address as before but the remote computer is responding with a different fingerprint. Therefore, it's possible that someone is spoofing the computer you previously connected to. This is a security issue.

If you're 100% sure that the remote computer isn't compromised, hacked, being spoofed, etc then all you need to do is delete the entry in your known_hosts file for the remote computer. That will solve the issue as there will no longer be a mismatch with SHA256 fingerprint IDs when connecting.

On Mac here's what I did:

1) Find the line of output that reads RSA host key for servername:port has changed and you have requested strict checking. You'll need both the servername and potentially port from that log output.

2) Back up the SSH known hosts file cp /Users/yourmacusername/.ssh/known_hosts /Users/yourmacusername/.ssh/known_hosts.bak

3) Find the line where the computer's old fingerprint is stored and delete it. You can search for the specific offending remote computer fingerprint using the servername and port from step #1. nano /Users/yourmacusername/.ssh/known_hosts

4) CTRL-X to quit and choose Y to save changes

Now type ssh -p port servername and you will receive the original prompt you did when you first tried to SSH to that computer. You will then be given the option to save that remote computer's updated SHA256 fingerprint to your known_hosts file. If you're using SSH over port 22 then the -p argument is not necessary.

Any issues you can restore the original known_hosts file: cp /Users/yourmacusername/.ssh/known_hosts.bak /Users/yourmacusername/.ssh/known_hosts


That should be marked as accepted answer. Following those steps fixed my problem while ssh-keygen -R [IP_ADDRESS] didn't work for me. Thanks!
Yeah, one of those cases that's not fair, best answer for sure. The 2nd and 3rd answers just repeat what the 1st said, and all of them have an incomplete solution.
and what if I am not sure that the remote computer is compromised?
S
Stephen Quan

As many have already said, use ssh-keygen, i.e.

ssh-keygen -R pong

Also, you may like to consider temporarily turning off host key checking:

ssh -oStrictHostKeyChecking=no root@pong

what I'm using for the .ssh/config: Host ???? CheckHostIP no StrictHostKeyChecking no (3 lines, tabulated starting from the 2nd)
C
Community

Works for me!

Error: Offending RSA key in /var/lib/sss/pubconf/known_hosts:4

This indicates you have an offending RSA key at line no. 4

Solution 1:

1. vi /var/lib/sss/pubconf/known_hosts 2. remove line no: 4. 3. Save and Exit, and Retry.

Solution 2:

ssh-keygen -R "you server hostname or ip"

OR

Solution 3:

sed -i '4d' /root/.ssh/known_hosts

This will remove 4th line of /root/.ssh/known_hosts in place(-i).


This works for root's .ssh known_hosts file. Not for /var/lib/sss/pubconf/known_hosts, which is a managed file by SSSD, and populated by a remote server.
on my case, for some reason, the issue happened on known_hosts*2*. Following these steps helped me to find that out, thanks @Sahil Gulati!
3
3nrique0

I used the solution of mockinterface, though the sed -i didn't quite work I solved it by deleting the line by hand with vim:

sudo vim /var/lib/sss/pubconf/known_hosts

You can use any other text editor you want, but probably you'll need to show your administrative privileges


Yes, delete the record of same IP in the known_hosts file will resolve the issue.
The entry is instantly recreated by SSSD when trying to ssh again. note that sss pubconf known_hosts is a managed file, not some local repository populated by the local server.
O
Oliver

Edit /home/hostname /.ssh/known_hosts,and delete the 4 lines, and save it.

Then run ssh root@pong again, you will see message like this:Are you sure you want to continue connecting (yes/no)? yes, just print yes.

Note: If you got some problem, read the hints first, it will help.


Best answer that actually explains what's going on.
t
tjespe

The other answers here are good and working, anyway, I solved the problem by deleting ~/.ssh/known_hosts. This certainly solves the problem, but it's probably not the best approach.


S
Sachith Muhandiram

This is because your remote computer settings have changed. Remove your current keys for that.

vim /root/.ssh/known_hosts

Delete the line of the IP you are connecting.


P
Prateek Joshi

In my case it happened because I previously had ssh connection with a machine with same ip(say 192.152.51.10) and the system was considering the RSA key(stored in /home/user_name/.ssh/known_hosts) of the previous host which resulted in mismatch.

To resolve this issue, you have to remove previously stored RSA key for the ip 192.152.51.10.

ssh-keygen -f "/home/user_name/.ssh/known_hosts" -R 192.152.51.10

H
Helton Malambane

Simple one-liner solution, tested on mac:

sed '/212.156.48.110/d' ~/.ssh/known_hosts > ~/.ssh/known_hosts

Deletes only the target ssh host IP from know hosts.

where 212.156.48.110 is replaced by the target host IP address.

Cause: Happened because the target IP was already known for a different machine due to port forwarding. Deleting the target IP before connecting will fix the issue.


K
Kishore

updated your ssh key, getting the above message is normal.

Just edit ~/.ssh/known_hosts and delete line 4, as the message pointed you

Offending RSA key in /Users/isaacalves/.ssh/known_hosts:4

or use ssh-keygen to delete the invalid key

ssh-keygen -R "you server hostname or ip"

M
Muktesh Kumar

Use this command:

truncate -s 0 /home/SYSTEM_NAME/.ssh/known_hosts

Please add an explanation what the command does and what it does not.
Why would you want to truncate the file? You lose all information, even the information you've already verified. This is a bad method to act against a single changed public host key.
Hint: This also deletes all other host information. If you are running automated scripts from your machine (like deployments), they might break because you have to manually reconfirm all host keys. Just to give a warning to other users here who are eager to use the easiest solution.
M
Mian Asbat Ahmad

If you are trying to connect to running docker container on port 2222 with the command and you get the error

mian@tdowrick2~$ ssh pos@localhost -p 2222

Then to solve this problem, on your local computer (i.e. host machine not container) go to cd ~/.ssh/ and open known_hosts file with text editor. Remove the line starting with [localhost]:2222 and save the file. Now try to ssh again

mian@tdowrick2~$ ssh pos@localhost -p 2222

Error will disappear but you have to do it each time the container restart.


B
Boris Karloff

I use Windows 10 PowerShell for connect in ssh. Mine problem was inside Windows C:\Users\youruser.ssh Delete the file known_hosts and that's all.


a
aircraft

My solution is:

vi ~/.ssh/known_hosts delete the line that contains your want connected ip.

This is better than delete all of the known_hosts


This is the same answer as miota85 below.
C
Chaminda Bandara

Remove that the entry from known_hosts using:

ssh-keygen -R *ip_address_or_hostname*

This will remove the problematic IP or hostname from known_hosts file and try to connect again.

From the man pages:

-R hostname Removes all keys belonging to hostname from a known_hosts file. This option is useful to delete hashed hosts (see the -H option above).


B
BrennQuin

Sometimes, if for any reason, you need to reinstall a server, when connecting by ssh we will find that you server say that the identification has changed. If we know that it is not an attack, but that we have reinstated the system, we can remove the old identification from the known_hosts using ssh-keygen:

ssh-keygen -R <host/ip:hostname>
root/.ssh/known_hosts updated.
Original contents retained as /root/.ssh/known_hosts.old

When connecting again we will ask you to validate the new fingerprint:

ssh -l user <host/ip:hostname>
The authenticity of host '<host/ip:hostname>' can't 
be established.
RSA key fingerprint is 3f:3d:a0:bb:59:24:35:6d:e5:a0:1a:3f:9c:86:81:90.
Are you sure you want to continue connecting (yes/no)? yes

this is the best answer as it actually tells me what is happening and why I am doing it
S
Srivatsan

Just do:

cd /home/user/.ssh/ -> here user will be your username, i.e. /home/jon/ for example.

Then

gedit known_hosts & and delete the contents inside it.

Now ssh again, it should work.


M
Mahmud

FINAL Solution!

It is showing due to the stored invalid ECDSA key. So we have to remove the ECDSA key from our master/controller machine by using the below command:

ssh-keygen -R 192.168.0.132

Here 192.168.0.132 is the remote system IP.


F
Fan

I had this problem, and the reason is very simple, I have a duplicated IP address to ssh login, so after modify this problem, everthing is solved.


F
Fortran

Only client side problem(duplicate key for ip):

Solve variants:

For clear one ip(default port 22):

ssh-keygen -f -R 7.7.7.7

For one ip(non default port):

ssh-keygen -f -R 7.7.7.7:333

Fast clear all ips:

cd ~; rm .ssh/known_hosts

7.7.7.7 - ssh your server ip connect

333 - non standart port


G
GoingMyWay

I had the same error in my machine, and I clear the known_hosts file, and after that, it works fine.


You don't want to delete your authorized_keys when you have a problem with the known_hosts file
N
Niranjan Mahesh

Simply clear the known_hosts which is present in /home/{username}/.ssh/known_hosts

vi /home/{username}/.ssh/known_hosts 

remove every line inside known hosts and exit after that you will be able to login.

OR

run this command

ssh-keygen -R "hostname/ip_address" 

D
DarkSkieS

SOLUTION:

1- delete from "$HOME/.ssh/known_hosts" the line referring to the host towards which is impossible to connect.

2- execute this command: ssh-keygen -R "IP_ADDRESSorHOSTNAME" (substitute "IP_ADDRESSorHOSTNAME" with your destination ip or destination hostname)

3- Retry ssh connection (if it fails please check permission on .ssh directory, it has to be 700)


D
Dionis Oros

My solution on UBUNTU (linux):

1.You have to delete the content from "known_hosts" file which is in "/home/YOUR_USERNAME/.ssh/known_hosts"

2.Generate a new ssh key like "ssh-keygen -t rsa -C "your.email@example.com" -b 4096"

3.Copy-paste your new ssh key in your git repository (gitlab in my case) SSH keys.

It works for me !