Problema di connessione SSH con errore "Verifica chiave host non riuscita ..."


179

Posso collegarmi a un'altra macchina Ubuntu nella mia LAN tramite SSH. Su entrambi i PC ho installato openssh-server ma da un altro computer Ubuntu non riesco a collegarmi al mio PC tramite SSH e ho riscontrato questo errore:

Verifica chiave host non riuscita ...


1
Usi nomi host o indirizzi IP?
Thorbjørn Ravn Andersen,

Non simile ma ho
riscontrato

Questo non è un problema specifico di Ubuntu. Può succedere con qualsiasi sshdalla riga di comando.
MarkHu

Risposte:


216

"Verifica della chiave dell'host non riuscita" significa che la chiave dell'host dell'host remoto è stata modificata.

SSH memorizza le chiavi host degli host remoti in ~/.ssh/known_hosts. Puoi modificare manualmente quel file di testo e rimuovere la vecchia chiave (puoi vedere il numero di riga nel messaggio di errore), oppure usare

ssh-keygen -R hostname

Dalla pagina 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.

(che ho appreso dalla risposta a È possibile rimuovere una particolare chiave host dal file known_hosts di SSH? ).


4
Può anche significare che semplicemente non hai la chiave host dell'host remoto. Ad esempio, se io rm ~/.ssh/*, quindi ssh -o BatchMode=yes root@somewhere, se non c'è niente di sbagliato, non Host key verification failed. otterrò importanza se sei sempre interattivo, ma pertinente per gli script che riscontrano lo stesso errore.
Ron Burk,

Non sorprende, i ssh-keygen -R example.net:7999rendimenti Host example.net:7999 not found in known_hosts.
alex,

Ho rimosso di nuovo known_hostsfile e ssh. Ha funzionato.
Parigi,

il file ~/.ssh/known_hostsè illeggibile
João Pimentel Ferreira il

128

Se si esegue in determinate situazioni remote / di scripting in cui non si ha accesso interattivo alla chiave di richiesta di aggiunta-host, aggirare il problema in questo modo:

$ ssh -o StrictHostKeyChecking=no user@something.example.com uptime

Avvertenza: aggiunto permanentemente "qualcosa.esempio.com, 10.11.12.13" (RSA) all'elenco degli host conosciuti.


6
+1, questa è una brutta soluzione, ma in alcuni casi di processi di monitoraggio automatizzati che funzionano con dispositivi dymaic collegati a ip, questa è una soluzione semplice e accettabile.
Ninsuo,

11
+1 Ad esempio, per le esecuzioni di Jenkins, questa è una buona soluzione. Grazie
Lobo,

5
@Lobo non posso essere più d'accordo, lo sto usando per jenkins, il che è bellosh """ssh -o StrictHostKeyChecking=No ec2-user@someIpAddress-e2e sudo service tomcat restart"""
prayagupd

Salvato la mia vita. Soluzione salvavita.
user1735921

10

Inoltre a volte c'è una situazione in cui stai lavorando sulla console seriale, quindi controllando il comando sopra in modalità dettagliata -vmostrerai che /dev/ttynon esiste, mentre esiste.

ssh -v user@hostname

Nel caso precedente basta rimuovere /dev/ttye creare un collegamento simbolico di /dev/ttyS0a /dev/tty.

rm /dev/tty
ln -s /dev/ttyS0 /dev/tty

In alternativa, aggiungi id_rsa.puballa posizione remota, quindi la password non viene richiesta e otterrai l'accesso di accesso.


6
+1 per avvisare di usare il parametro -v; questo può aiutare molto nel debug di problemi ssh.
Daniel Kullmann,

8

Nel mio caso, questo è stato causato da un problema udev: non c'era un /dev/ttynodo del dispositivo. La soluzione per me era solo:

sudo mknod -m 666 /dev/tty c 5 0

6

Sul terminale:

ssh -o StrictHostKeyChecking=no -i YourPublicKey.pem user@example.com uptime

Apparirà il seguente messaggio o simile:

Warning: Permanently added 'example.com, XX.XXX.XXX.XX' (ECDSA) to the list of known hosts.
 00:47:37 up 3 min,  0 users,  load average: 0.00, 0.00, 0.00

Quindi, connettiti all'EC2 normalmente:

ssh -i YourPublickey.pem user@example.com

Ho capito command-line line 0: Bad yes/no/ask argument.perché usi erroneamente 'No' invece di 'no' come argomento perStrictHostKeyChecking
Axel Bregnsbo,

3

Bene, semplicemente perché il secondo Ubuntu richiede una connessione tramite chiave e non con password.

Ti suggerisco di usarlo sudo dpkg-reconfigure openssh-serversul tuo PC e quindi dovrebbe funzionare correttamente. Ripristinerà la configurazione di openssh e dovrebbe tornare a un'autenticazione password predefinita.

La seconda possibilità è che c'è già una chiave per l'altro tuo Ubuntu nel tuo PC, e che è cambiato e non è più riconosciuto. In questo caso, dovrai modificare il file .ssh/authorized_keysper rimuovere la linea problematica che identifica il tuo ubuntu.


3

Questo è un vecchio thread e ho appena incontrato questa risposta, aggiungerò semplicemente quello che ho fatto per risolverlo.

ssh-keygen -f "/home/USER/.ssh/known_hosts" -R HOSTNAME

Ho appena guardato il messaggio di errore che mi ha lanciato e mi ha detto di eseguire quel comando per rimuoverlo dalla lista degli host. Successivamente ho fatto quanto segue:

ssh-copy-id HOSTNAME

Poi ho seguito le istruzioni da lì fino a quando non sono stato in grado di accedere al server.


Come questo comando sto ricevendo come suggerimento in Ubuntu 12.4.
MaNKuR,

2

Significa che la chiave dell'host remoto è stata modificata (potrebbe essere la modifica della password dell'host),

Il tuo terminale ha suggerito di eseguire questo comando come utente root

$ ssh-keygen -f "/root/.ssh/known_hosts" -R [www.website.net]:4231

Devi rimuovere quel nome host dall'elenco degli host sul tuo PC / server. Copia quel comando suggerito ed eseguilo come utente root.

$ sudo su                                                            // Login as a root user

$ ssh-keygen -f "/root/.ssh/known_hosts" -R [www.website.net]:4231   // Terminal suggested command execute here
Host [www.website.net]:4231 found: line 16 type ECDSA
/root/.ssh/known_hosts updated.
Original contents retained as /root/.ssh/known_hosts.old

$ exit                                                               // Exist from root user

$ sudo ssh root@www.website.net -p 4231                              // Try again

Spero che funzioni.


1

Dovresti cambiare la tua chiave in questo modo: dal tuo errore dato scopri quale chiave host è cambiata, ad esempio: Offending ECDSA key in /Users/user-name/.ssh/known_hosts:5 ha detto che la 5a chiave è cambiata, quindi fai questo:

sed -i '5d' ~/.ssh/known_hosts

Avviso: devi essere root o avere il privilegio di sudo.


No, a meno che tu non lo stia facendo per qualcun altro, non richiede root né sudo. Stai modificando il file nella tua home directory. Secondo: per funzionare il comando richiede GNU sed.
techraf,

Forse hai ragione, ma ho provato a ssh da Mac OSX a Ubuntu-Server e devo farlo. a proposito grazie per il tuo commento.
Amir.AG

1

devi inserire la chiave rsa dell'host di destinazione nell'host di origine /home/user/.ssh/known_hostseseguendola sulla destinazione

ssh-keyscan -t rsa @targethost

1

Potrebbe essere solo necessario inserire "sì" quando ssh conferma che si desidera continuare a connettersi.

Come muggito.

The authenticity of host 'xxx' can't be established.
ECDSA key fingerprint is yyy.
Are you sure you want to continue connecting (yes/no)? yes
Warning: Permanently added 'xxx' (ECDSA) to the list of known hosts.
Enter passphrase for key '/Users/ysy/.ssh/id_rsa':

Quindi inserisci la tua password.

Prestare attenzione a "Sei sicuro di voler continuare a connetterti (sì / no)? ". Devi inserire si, non entrare.


1

Oltre a disabilitare rigorosamente il controllo della chiave host, è anche possibile connettersi digitando:

ssh -o LogLevel=quiet -o UserKnownHostsFile=/dev/null -o StrictHostKeyChecking=no <username@target_machine_ip_or_domain_name>

0

pico ~/.ssh/known_hosts ed elimina tutte le linee, dopo aver appena riconnesso e otterrai una nuova chiave.


6
Questa è una soluzione pericolosa, perché rimuoverai TUTTE le tue chiavi host. La soluzione accettata ssh-keygen -R hostnameè migliore.
msanford,

0

La mia soluzione proviene da questo post sul blog: negoziazione dell'algoritmo non riuscita per SSH Secure Shell Client

È necessario modificare il file come segue:

sudo nano /etc/ssh/sshd_config

E quindi aggiungere quanto segue:

# Ciphers
Ciphers aes128-cbc,aes192-cbc,aes256-cbc,blowfish-cbc,arcfour
KexAlgorithms diffie-hellman-group1-sha1

Fondamentalmente hai provato diverse soluzioni fino a quando non ne trovi una in grado di risolvere il tuo problema. Se le soluzioni di cui sopra non funzionano, prova questa. Se anche questo non funziona, prova gli altri.


0

Basta fare "sudo vi /var/root/.ssh/known_hosts" e rimuovere la linea, che contiene una chiave per un host a cui si sta tentando di connettersi e riconnettersi nuovamente.

Non conosco la tua situazione particolare, ma molto probabilmente questo errore è arrivato con un messaggio come questo:

my_mac:~ oivanche$ sudo ssh pi@192.168.0.45
@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
@    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:sx1Z4xyGY9venBP6dIHAoBj0VhDOo7TUVCE2xWXpzQk.
Please contact your system administrator.
Add correct host key in /var/root/.ssh/known_hosts to get rid of this message.
Offending ECDSA key in /var/root/.ssh/known_hosts:74
ECDSA host key for 192.168.0.45 has changed and you have requested strict checking.
Host key verification failed.

Se leggerai il registro più attentamente vedrai che la chiave che hai da un host è in conflitto con una chiave che hai già - in questo caso è sulla riga 74 del file known_hosts (Chiave ECDSA offensiva in / var / root / .ssh / known_hosts: 74). Rimuovere la linea da known_hosts, salvare le modifiche e riconnettersi.


-1
chmod 666 /dev/tty 

è ancora un'altra soluzione tty - a volte, questo file del dispositivo ha autorizzazioni errate.

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.