Flusso di lavoro più fluido per gestire gli errori di verifica dell'host SSH?


41

Questo è un semplice problema che tutti noi affrontiamo e probabilmente risolviamo manualmente senza pensarci troppo.

Quando i server cambiano, vengono sottoposti a nuovo provisioning o gli indirizzi IP vengono riallocati, riceviamo di seguito il messaggio di verifica dell'host SSH. Sono interessato a semplificare il flusso di lavoro per risolvere questi errori di identificazione ssh.

Dato il seguente messaggio, in genere vi /root/.ssh/known_hosts +434rimuovo ( dd) la linea offensiva.

Ho visto sviluppatori / utenti di altre organizzazioni eliminare l' intero known_hosts file per frustrazione nel vedere questo messaggio. Anche se non vado così lontano, so che esiste un modo più elegante per gestirlo.

Suggerimenti?

[root@xt ~]# ssh las-db1

@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
@    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 the RSA host key has just been changed.
The fingerprint for the RSA key sent by the remote host is
ed:86:a2:c4:cd:9b:c5:7a:b1:2b:cc:42:15:76:8c:56.
Please contact your system administrator.
Add correct host key in /root/.ssh/known_hosts to get rid of this message.
Offending key in /root/.ssh/known_hosts:434
RSA host key for las-db1 has changed and you have requested strict checking.
Host key verification failed.

Abbiamo lo stesso problema. Non ho esperienza con Mesh ti.arc.nasa.gov/opensource/projects/mesh della NASA, ma è nella mia lista di tecnologie da rivedere.
Andrew Gilmartin,

1
Perché non copiare la vecchia chiave durante la reinstallazione / riallocazione di un server?
Casuale 832

@ Random832 Non si ridimensiona in una situazione in cui hai molti server ... O se hai un ambiente di laboratorio / test in cui ricicli spesso gli indirizzi IP. O un altro caso; una sostituzione del server non pianificata in cui il server originale non è disponibile ...
ewwhite

3
La grande domanda che ho è: come si arriva a questa situazione? Se stai riutilizzando i nomi host, potresti voler riconsiderare lo standard dei nomi host ( tools.ietf.org/html/rfc1178 ). Se stai riutilizzando gli indirizzi IP, dovresti avere la disattivazione delle chiavi ssh come parte della stessa procedura della disattivazione del server precedente su quell'indirizzo IP. Se stai lavorando in un ambiente "Webscale" in cui il riutilizzo dell'IP avviene su base automatizzata e i nomi host semi-insignificanti sono obbligatori, allora dovresti avere un processo del ciclo di vita del server abbastanza ben automatizzato che la riparazione delle chiavi ssh procederà
Paul Gear

Risposte:


47

È possibile utilizzare il ssh-keygencomando per rimuovere voci specifiche dall'host:

ssh-keygen -R las-db1

Se non hai questo comando, puoi sempre usare sed:

sed -i '/las-db1/d' /root/.ssh/known_hosts

3
L'uso di ssh-keygen -R per risolvere il problema con chiavi in ​​conflitto è anche ciò che il client ssh in Ubuntu suggerisce nel messaggio di errore quando si verifica questo problema.
Kenny Rasschaert,

Non ero a conoscenza di quel passaggio al ssh-keygencomando. Buono!
ewwhite,

10
Ricorda di verificare e accertarti che qualcuno non stia effettivamente "FACENDO QUALCOSA DI NASTY!"
Michael Hampton

1
Assicurati di non farlo in una conferenza!
Paul Gear,

2
@ewwhite Popoli il /etc/ssh/known_hostsfile sulla tua rete con le chiavi host appropriate (gestite con burattino, ecc.), oppure popoli il tuo file ~ / .ssh / known_hosts personale (per fare uno di questi puoi passare ssh-keyscansu un bene noto / sicuro connessione). Escludendo quello (e supponendo che non ti interessi affatto della sicurezza) impostato UserKnownHostsFile=/dev/nulle StrictHostKeyChecking=nonel tuo ~/.ssh/config file(o passa le opzioni con cui ssh -o)
voretaq7

25

Come utente fantoccio, il mio metodo per risolvere questo problema consiste nel fare in modo che il mio server fantoccio raccolga le mie chiavi host SSH e le pubblichi su tutti i miei sistemi che effettuano connessioni SSH.

In questo modo non devo preoccuparmi di rimuoverli. Il novantanove percento delle volte burattino ha funzionato e aggiornato le chiavi per me poiché i miei agenti sono in esecuzione ogni trenta minuti. Le eccezioni per me sono molto rare, quindi non mi dispiace una rapida modifica del sistema known_hosts se non sono disposto ad aspettare.

class ssh::hostkeys {

  @@sshkey { "${::clientcert}_rsa":
    type => rsa,
    key => $sshrsakey,
    tag => 'rsa_key',
  }

  if 'true' == $common::params::sshclient {
    Sshkey <<| tag == 'rsa_key' |>> {
      ensure => present
    }
  }

  file {'/etc/ssh/ssh_known_hosts':
    ensure => present,
    owner => 'root',
    group => 'root',
    mode => 0644,
  }

}

+1 Buona mossa per incorporare strumenti di gestione della configurazione.
ewwhite,

4

Vorrei aggiungere un suggerimento che può aiutarti in casi molto specifici in cui la sicurezza è meno preoccupante.

Ho un ambiente di laboratorio con macchine che vengono reinstallate spesso. Ogni volta che accade, vengono generate nuove chiavi host (probabilmente potrei salvare la chiave host da qualche parte e impostarla nello script post-installazione).

Poiché la sicurezza non è un problema per me in questo ambiente di laboratorio e le chiavi cambiano così spesso, nel mio file .ssh / config ho quanto segue:

Host lab-*
  User kenny
  IdentityFile ~/.ssh/lab_id_rsa
  StrictHostKeyChecking no
  UserKnownHostsFile=/dev/null

Questo si assicura che la connessione ai miei computer non causerà mai più quell'errore e il mio client ssh si connetterà semplicemente senza controllare la chiave host.

Questo è qualcosa che dovresti fare solo se la sicurezza non ti preoccupa affatto, perché ti mette in una posizione vulnerabile per un attacco man-in-the-middle.


1
Sembra rischioso. Vorrei mantenere la verifica dell'host poiché alcuni di questi sono sistemi rivolti al pubblico.
ewwhite,

1
Questo sarà il motivo per cui ha detto che questo metodo è solo per "dove la sicurezza è meno / nessuna preoccupazione". Le reti private / gli ambienti di laboratorio sono perfetti per questa configurazione. Produzione multi-macchina di scalabilità automatica / sistemi di rivestimento pubblico, non tanto.
dannosaur,

4

Secondo la nota di rilascio di openssh 5.6 , non è più necessario utilizzare le chiavi degli host:

L'autenticazione basata su host ora può utilizzare le chiavi host del certificato. Le chiavi CA devono essere specificate in un file known_hosts usando il marcatore @ cert-Authority come descritto in sshd (8).

Avvertenza : finora non ho mai sentito parlare di nessuno che utilizza questa funzione in produzione. Utilizzare a proprio rischio (ma credo che gli sviluppatori di openssh siano abbastanza paranoici da non rilasciare una tale funzione killer senza molti test e audit del codice).


2

Il DNS delle risorse SSHFP può essere d'aiuto a seconda di quanto il tuo client ssh ne trae vantaggio. Memorizza tutte le impronte digitali della chiave pubblica ssh con il nome host.

Implementare preventivamente DNSSEC o DNS su SSL.
http://www.ietf.org/rfc/rfc4255.txt

FreeIPA.org gestisce la gestione delle chiavi dell'host e dell'utente, nonché i certificati PKI. Inoltre, carica automaticamente i record DNS SSHFP quando vengono create nuove chiavi.

Il demone dei servizi di sicurezza del sistema (SSSD) può essere configurato per memorizzare nella cache e recuperare le chiavi SSH dell'host in modo che le applicazioni e i servizi debbano cercare in una sola posizione le chiavi dell'host. Poiché SSSD può utilizzare FreeIPA come uno dei suoi provider di informazioni sull'identità, FreeIPA fornisce un repository di chiavi universale e centralizzato. Gli amministratori non devono preoccuparsi di distribuire, aggiornare o verificare le chiavi SSH dell'host.

http://docs.fedoraproject.org/en-US/Fedora/17/html/FreeIPA_Guide/host-keys.html

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.