L'identificazione dell'host remoto ssh è cambiata


619

Ho reinstallato il mio server e ricevo questi messaggi:

[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.

Ho provato varie soluzioni che ho trovato su Internet. Il mio known_hostsfile (normalmente in ~/.ssh/known_hosts) è in /var/lib/sss/pubconf/known_hosts. Ho provato a modificarlo, ma rimane in uno stato. Ho installato ipa-client e ho Fedora 19. Come posso risolvere questo avviso?

Tutte le risposte a cui hai risposto finora funzionano solo se non hai installato Freeipa.

La risposta giusta per freeipa nei commenti qui sotto di adrin è qui .


1
ho appena scoperto che questo problema può verificarsi anche se hai un conflitto di indirizzi IP nslookup il tuo ip per eseguire il debug di questo problema di più
sharrajesh

1
C'è un punto morto qui. Questo è contrassegnato come duplicato in modo che nessuno possa aggiungere la risposta e quello che collega è contrassegnato come fuori tema quindi non è possibile aggiungere la risposta anche lì. Se elimini known_hosts, risolverà anche il problema.
zar,

1
Ho avuto lo stesso problema. Per amor mio e degli altri, ecco la domanda e la mia risposta: superuser.com/questions/1071204/…
adrin,

3
Come qualcuno che cerca di verificare prima la propria chiave ho trovato utile questa risposta. askubuntu.com/a/83499/620623
Declan McKenna il

Come menziona sharrajesh: controlla le tue voci DNS (in FreeIPA per me) e vedi che non hai più voci A con IP che non sono raggiungibili dalla rete.
th3penguinwhisperer,

Risposte:


1071

Ecco la soluzione più semplice

ssh-keygen -R <host>

Per esempio,

ssh-keygen -R 192.168.3.10

Dalla ssh-keygenpagina man :

  • -R hostnameRimuove tutte le chiavi appartenenti al nome host da un file known_hosts. Questa opzione è utile per eliminare gli host con hash (vedi l'opzione -H sopra).

Sono su Windows e questa soluzione, né rimuovere la chiave, funziona, cos'altro posso provare?
jaycode

5
Va bene, su Windows ho bisogno di usare il terminale da Git Bash per questo (o qualsiasi terminale MingW32). Difficile.
jaycode

25
tenere presente che se si è connessi tramite una porta specifica, potrebbe essere necessario rimuovere con sintassi come ssh-keygen -R [127.0.0.1]:3022. Controlla il tuo file .ssh / known_hosts per quello che dice esplicitamente.
Adam Johns,

4
Quando provo questo ottengo l'errore "<nomehost> non trovato in ~ / .ssh / known_hosts"
Nodeocrat

3
Perché si verifica questo avviso?
Vilas Joshi

199

Uso

ssh-keygen -R [hostname]

Esempio con un indirizzo IP / nome host sarebbe:

ssh-keygen -R 168.9.9.2

Ciò aggiornerà l'offesa del tuo host da known_hosts. Puoi anche fornire il percorso di known_hosts con -f flag.


1
Rimozione della chiave corrispondente $ ssh-keygen -R {server.name.com}| $ ssh-keygen -R {ssh.server.ip.address}| $ ssh-keygen -R server.example.com
DaddyMoe,

5
In che modo una risposta senza spiegazione ottiene così tanti voti ... nessuna preoccupazione per la sicurezza, nessuna spiegazione .... -1
Daniel W.

4
Sembra anche una copia dell'altra risposta di seguito. Per favore, un mod ripulisca questo casino ...
Daniel W.

115

Ho avuto lo stesso errore dopo che ho ricreato un'immagine Ubuntu Digital Ocean. Ho usato il seguente comando con il mio IP del server al posto di[IP_ADDRESS]

ssh-keygen -R [IP_ADDRESS]

Grazie mille! Stavo usando il nome host e funzionava solo con IP_ADDRESS :)
J. Lopes,

1
Questo è stato per me e dovrebbe essere la risposta accettata. Non so perché ci siano due copie di questa risposta che è arrivata dopo ed entrambe hanno più voti.
Wylliam Judd,

Il tuo non è stato lo stesso errore; il tuo server non eseguiva SSSD. Vedi l'OP.
Mercury00,

39

Quando reinstalli il server la sua identità cambia e inizierai a ricevere questo messaggio. Ssh non ha modo di sapere se hai cambiato il server a cui si connette o se un server nel mezzo è stato aggiunto alla tua rete per annusare tutte le tue comunicazioni, quindi ti porta alla tua attenzione.

Basta rimuovere la chiave da known_hosts eliminando la voce pertinente:

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

Il 4dè sul conto diOffending RSA ...known_hosts:4


1
Grazie, ma non so perché, ma lo rimuovo ed è di nuovo dentro. Ho provato a interrompere il servizio sssd e questo effetto è scomparso, ma dopo aver avviato sssd, appare di nuovo.
Filip Dobrovolný,

Eseguire il backup della directory ~ / .ssh e quindi eliminarlo. Il vostro servizio continua ad aggiungere nuovamente le chiavi dopo che ~ / .ssh è stato spazzato via?
mockinterface

Ho rinominato .ssh in .ssh_old, dopo aver provato a connetterlo basta creare una directory vuota .ssh. E non riesco ancora a rendere "modificabile" / var / lib / sss / pubconf / known_hosts.
Filip Dobrovolný,

4
Il modo più portatile per farlo: sed -i -e 4d /var/lib/sss/pubconf/known_hosts
Pierz,

2
Come si esegue il backup del server identificationnel caso in cui si desideri ricostruire il server senza causare interruzioni come questo messaggio di errore?
Ninjaxor,

38

La mazza è quella di rimuovere ogni host conosciuto in un colpo solo:

rm ~/.ssh/known_hosts

Mi oppongo a questo perché utilizziamo piccole sottoreti di server di breve durata da una jump box e spesso abbiamo un riutilizzo dell'indirizzo IP interno dei server che condividono la stessa chiave ssh.


Ha funzionato per me su una macchina virtuale vagabonda quando la risposta accettata non ha funzionato.
100pic

1
Strumento utile da avere nella cintura, ma questo potrebbe aprirti per un attacco MitM (la cosa esatta che known_hostsdovrebbe prevenire). Fallo solo se sei sicuro che tutti gli host presenti siano al sicuro.
Freedom_Ben

26

Il problema è che in precedenza hai accettato una connessione SSH a un computer remoto e l'impronta digitale digitale di quel computer remoto o la chiave hash SHA256 è cambiata dall'ultima connessione. Quindi quando provi di nuovo a SSH o usi github per estrarre il codice, che usa anche SSH, ricevi un errore. Perché? Perché stai utilizzando lo stesso indirizzo di computer remoto di prima ma il computer remoto sta rispondendo con un'impronta digitale diversa. Pertanto, è possibile che qualcuno stia falsificando il computer a cui si era precedentemente connessi. Questo è un problema di sicurezza.

Se sei sicuro al 100% che il computer remoto non è stato compromesso, violato, essere contraffatto, ecc., Tutto ciò che devi fare è eliminare la voce nel tuo file known_hosts per il computer remoto. Ciò risolverà il problema poiché non ci sarà più una mancata corrispondenza con gli ID impronta digitale SHA256 durante la connessione.

Su Mac ecco cosa ho fatto:

1) Trova la riga di output che legge RSA host key for servername:port has changed and you have requested strict checking.Avrai bisogno sia del nomeserver sia della porta potenziale da quell'output del log.

2) Eseguire il backup del file degli host conosciuti SSH cp /Users/yourmacusername/.ssh/known_hosts /Users/yourmacusername/.ssh/known_hosts.bak

3) Trova la riga in cui è memorizzata la vecchia impronta digitale del computer ed eliminala. È possibile cercare l'impronta digitale specifica del computer remoto offensivo utilizzando il nomeserver e la porta dal passaggio 1.nano /Users/yourmacusername/.ssh/known_hosts

4) CTRL-X per uscire e scegliere Y per salvare le modifiche

Ora digita ssh -p port servernamee riceverai il prompt originale che hai fatto quando hai provato a SSH per la prima volta su quel computer. Ti verrà quindi data la possibilità di salvare l'impronta digitale SHA256 aggiornata di quel computer remoto nel tuo file known_hosts. Se si utilizza SSH sulla porta 22, l'argomento -p non è necessario.

Eventuali problemi che è possibile ripristinare il file known_hosts originale: cp /Users/yourmacusername/.ssh/known_hosts.bak /Users/yourmacusername/.ssh/known_hosts


3
Questo dovrebbe essere contrassegnato come risposta accettata. Seguire questi passaggi ha risolto il mio problema mentre ssh-keygen -R [IP_ADDRESS]non funzionava per me. Grazie!
Yusuf Kamil AK,

Sì, uno di quei casi non è giusto, la migliore risposta è certa. La seconda e la terza risposta ripetono semplicemente ciò che il primo ha detto e tutti hanno una soluzione incompleta.
brasofilo,

16

Come molti hanno già detto, utilizzare ssh-keygen, vale a dire

ssh-keygen -R pong

Inoltre, ti consigliamo di disattivare temporaneamente il controllo della chiave host:

ssh -oStrictHostKeyChecking=no root@pong

quello che sto usando per .ssh / config : Host ???? CheckHostIP no StrictHostKeyChecking no(3 righe, tabulato a partire dal 2 °)
XXL

15

Per me va bene!

Errore: violazione della chiave RSA in / var / lib / sss / pubconf / known_hosts: 4

Questo indica che hai una chiave RSA offensiva alla riga n. 4

Soluzione 1 :

1. vi /var/lib/sss/pubconf/known_hosts

2 remove line no: 4 .

3 Save and Exit, and Retry .

Soluzione 2:

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

O

Soluzione 3:

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

Questo rimuoverà la 4thlinea di /root/.ssh/known_hostsin place ( -i).


1
Funziona con il file .ssh known_hosts di root. Non per / var / lib / sss / pubconf / known_hosts, che è un file gestito da SSSD e popolato da un server remoto.
Mercurio

1
nel mio caso, per qualche motivo, il problema si è verificato su known_hosts * 2 *. Seguire questi passaggi mi ha aiutato a scoprirlo, grazie @Sahil Gulati!
Lucas,

11

Ho usato la soluzione di mockinterface, anche se sed -i non ha funzionato del tutto, l'ho risolto eliminando la linea a mano con vim:

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

Puoi usare qualsiasi altro editor di testo che desideri, ma probabilmente dovrai mostrare i tuoi privilegi di amministratore


1
Sì, eliminare il record dello stesso IP nel file known_hosts risolverà il problema.
wherby

La voce viene immediatamente ricreata da SSSD quando si tenta di eseguire di nuovo SSH. si noti che sss pubconf known_hosts è un file gestito, non un repository locale popolato dal server locale.
Mercurio

9

Per gli utenti Mac, è possibile utilizzare la -Rbandiera del ssh-keygencomando. Esempio rapido:

ssh-keygen -R THE_IP_ADDRESS

THE_IP_ADDRESSessendo l'IP in cui stai cercando di scrivere. E poi puoi connetterti bene.


8

Questo perché le impostazioni del tuo computer remoto sono state modificate. Rimuovi le tue chiavi attuali per quello.

vim /root/.ssh/known_hosts

Elimina la linea dell'IP che stai collegando.


7

Modifica /home/hostname /.ssh/known_hosts, elimina le 4 righe e salvale.

Quindi esegui di ssh root@pongnuovo, vedrai un messaggio come questo Are you sure you want to continue connecting (yes/no)? yes:, basta stampare yes.

Nota: se hai qualche problema, leggi prima i suggerimenti, ti aiuterà.


La migliore risposta che in realtà spiega cosa sta succedendo.
Prometeo

6

Le altre risposte qui sono buone e funzionanti, comunque ho risolto il problema eliminando ~/.ssh/known_hosts. Questo certamente risolve il problema, ma probabilmente non è l'approccio migliore.


6

Nel mio caso è successo perché in precedenza avevo una connessione ssh con una macchina con lo stesso ip (diciamo 192.152.51.10) e il sistema stava considerando la chiave RSA (memorizzata in /home/user_name/.ssh/known_hosts) dell'host precedente che ha portato non corrispondente.

Per risolvere questo problema, è necessario rimuovere la chiave RSA precedentemente memorizzata per l'ip 192.152.51.10 .

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

5

Semplice soluzione da una fodera, testata su mac:

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

Elimina solo l'IP host ssh di destinazione da host conosciuti.

dove 212.156.48.110 è sostituito dall'indirizzo IP host di destinazione.

Causa : è successo perché l'IP di destinazione era già noto per un altro computer a causa del port forwarding. L'eliminazione dell'IP di destinazione prima della connessione risolverà il problema.


4

Usa questo comando:

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

Aggiungi una spiegazione su cosa fa il comando e cosa no.
Daniel W.

6
Perché dovresti troncare il file? Perdi tutte le informazioni, anche quelle che hai già verificato. Questo è un metodo errato per agire contro una singola chiave host pubblica modificata.
Daniel W.

1
questo è un trucco totale: D ma funziona: D
Benjamin,

Suggerimento: questo elimina anche tutte le altre informazioni sull'host. Se si eseguono script automatici dal proprio computer (come distribuzioni), potrebbero interrompersi poiché è necessario riconfermare manualmente tutte le chiavi host. Giusto per dare un avviso agli altri utenti che sono desiderosi di utilizzare la soluzione più semplice.
Mateng,

3

Rimuovere la voce da known_hosts utilizzando:

ssh-keygen -R *ip_address_or_hostname*

Ciò rimuoverà l'IP o il nome host problematico dal file known_hosts e tenterà di riconnettersi.

Dalle pagine man:

-R hostname
Rimuove tutte le chiavi appartenenti al nome host da un file known_hosts. Questa opzione è utile per eliminare gli host con hash (vedi l'opzione -H sopra).


3

Basta fare:

cd /home/user/.ssh/-> qui usersarà il tuo nome utente, /home/jon/ad esempio ad esempio.

Poi

gedit known_hosts & ed elimina il contenuto al suo interno.

Ora di sshnuovo, dovrebbe funzionare.


3

Se si sta tentando di connettersi al contenitore docker in esecuzione sulla porta 2222 con il comando e si ottiene l'errore

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

Quindi, per risolvere questo problema, sul tuo computer locale (es. Macchina host non contenitore) vai su cd ~/.ssh/e apri il known_hostsfile con l'editor di testo. Rimuovere la riga che inizia con [localhost]:2222e salvare il file. Ora prova di nuovo a ssh

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

L'errore scompare ma è necessario farlo ogni volta che si riavvia il contenitore.


2

La mia soluzione è:

  1. vi ~/.ssh/known_hosts
  2. elimina la riga che contiene l'ip desiderato.

Questo è meglio che eliminare tutto known_hosts


Questa è la stessa risposta di miota85 di seguito.
Daniel W.

2

Solo problema lato client (chiave duplicata per ip):

Risolvi varianti:

Per cancellare un ip (porta predefinita 22):

ssh-keygen -f -R 7.7.7.7

Per un ip ( porta non predefinita ):

ssh-keygen -f -R 7.7.7.7:333

Cancella velocemente tutti ips:

cd ~; rm .ssh/known_hosts

7.7.7.7 - ssh il tuo ip server si connette

333 - porta non standard


2

A volte, se per qualsiasi motivo, è necessario reinstallare un server, quando ci si connette tramite ssh scopriremo che il server afferma che l'identificazione è cambiata. Se sappiamo che non è un attacco , ma che abbiamo ripristinato il sistema, possiamo rimuovere la vecchia identificazione da known_hosts usando ssh-keygen:

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

Quando ti riconnetti ti chiederemo di convalidare la nuova impronta digitale:

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

1

Ho avuto questo problema, e la ragione è molto semplice, ho un indirizzo IP duplicato per accedere a ssh, quindi dopo aver modificato questo problema, tutto è risolto.


1

Ho avuto lo stesso errore nella mia macchina e ho cancellato il known_hostsfile, e dopo, funziona benissimo.


1
Non vuoi cancellare il tuo authorized_keysquando hai un problema con il known_hostsfile
jeb

0

SOLUZIONE:

1- elimina da "$ HOME / .ssh / known_hosts" la linea che si riferisce all'host a cui è impossibile connettersi.

2- eseguire questo comando: ssh-keygen -R "IP_ADDRESSorHOSTNAME" (sostituire "IP_ADDRESSorHOSTNAME" con l'ip di destinazione o il nome host di destinazione)

3- Riprova connessione ssh (se fallisce, controlla l'autorizzazione nella directory .ssh, deve essere 700)


0

La mia soluzione su UBUNTU (linux):

1. Devi eliminare il contenuto dal file "known_hosts" che si trova in "/home/YOUR_USERNAME/.ssh/known_hosts"

2. Generare una nuova chiave ssh come "ssh-keygen -t rsa -C" your.email@example.com "-b 4096"

3.Copia-incolla la tua nuova chiave ssh nel tuo repository git (gitlab nel mio caso) chiavi SSH.

Per me funziona !


-1

AWS EC2.

Trova l'ip nel messaggio che ti dà.

correre

vim /home/ec2-user/.ssh/known_hosts

Utilizzare i tasti di direzione per trovare l'ip dal messaggio e fare clic.

dd

Questo eliminerà quella linea, quindi eseguirà la fuga

:wp

Ciò consentirà di risparmiare, allora sei a posto.

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.