Le chiavi ECDSA sono cambiate, SSH non è sicuro ora?

27

Gestisco alcuni server Ubuntu non critici nella mia stanza del dormitorio all'università. Spegnerli prima di rompere, tornare indietro, SSH in, e ottenere un avvertimento che le chiavi ECDSA sono cambiate.

Sembrava molto simile a questo

Warning: the ECDSA host key for '<snip>' differs from the key for the IP address '<snip>'
Offending key for IP in /home/<snip>/.ssh/known_hosts:14
Matching host key in /home/<snip>/.ssh/known_hosts:12
Are you sure you want to continue connecting (yes/no)?

Questo sembra molto meno spaventoso dell'errore dell'identità del server modificato, quindi non mi preoccupo troppo ma, comunque, cosa causerebbe questo cambiamento? È qualcosa di cui dovrei preoccuparmi?

    
posta TheLQ 09.01.2012 - 23:42
fonte

3 risposte

39

Quando ti connetti per la prima volta a un determinato server SSH, ottieni la solita domanda con l'impronta digitale della chiave; in seguito, il client SSH memorizza una copia della chiave pubblica del server nel file .ssh/known_hosts . Ma il client SSH memorizza in realtà due chiavi: una per il server nome e una per il server IP .

Ad esempio, supponiamo che il server foo.example.com abbia IP 10.0.0.8 . Alla prima connessione ( ssh foo.example.com ), il client SSH otterrà la chiave pubblica del server, visualizzerà l'impronta digitale (un hash della chiave pubblica), chiederà conferma e quindi memorizzerà nel file known_hosts due mapping, uno per foo.example.com , l'altro per 10.0.0.8 , entrambi che puntano alla stessa chiave pubblica.

Quando ci si ricollega allo stesso server, SSH verifica i due mapping. Se la prima mappatura (quella per il nome) produce una chiave pubblica diversa da quella registrata in known_hosts , si ottiene il messaggio di errore spaventoso con MAIUSCOLE MAIUSCOLE (è così che riesce a essere spaventoso) e il cliente rifiuta per connettersi ulteriormente (quindi il messaggio non è solo spaventoso, è anche abbastanza scomodo).

Un'altra situazione è quando la prima associazione corrisponde:

  • I tipi di utenti: ssh foo.example.com .
  • Il sistema DNS risolve quel nome in IP 10.0.0.8 .
  • Il client SSH si connette a quella macchina e ottiene la chiave pubblica del server SSH.
  • La chiave pubblica ottenuta corrisponde a quella trovata in .ssh/known_hosts sotto la voce foo.example.com .
  • MA la chiave pubblica ottenuta NON corrisponde a quella trovata in .ssh/known_hosts sotto la voce 10.0.0.8 .

In tal caso, si ottiene il messaggio esatto che viene visualizzato nella domanda. Il client SSH ha la certezza che stai parlando con il server previsto - la chiave pubblica corrisponde a quella registrata per lo stesso nome del server - ma qualcosa non funziona, quindi l'avviso e la conferma pronta.

Questo può accadere quando l'IP del server è cambiato. Con l'esempio sopra, supponiamo che, la scorsa settimana, foo.example.com abbia IP 10.0.0.7 , ma bar.example.com ha avuto IP 10.0.0.8 . A quel tempo, ti sei collegato ad entrambi. Ma lo scorso fine settimana, un sysadmin con un leggero disturbo ossessivo compulsivo ha deciso che alcuni IP dovevano essere modificati, in modo da poter impostare regole di networking più efficienti, regolari e matematicamente eleganti. Così ha "spostato i server" e impostato bar.example.com su IP 10.0.0.16 e foo.example.com su 10.0.0.8 . Il nostro amico sysadmin ha configurato il DNS in modo doveroso per segnalare il nuovo IP. Ora siamo lunedì e vuoi collegarti di nuovo. Il tuo client SSH parla al DNS, ottiene il nuovo IP per foo.example.com , e tutto va bene, tranne che la chiave registrata per 10.0.0.8 non corrisponde alla chiave pubblica di foo.example.com : infatti , il tuo file known_hosts contiene una copia della chiave pubblica di bar.example.com , elencata sotto l'IP 10.0.0.8 , che, fino alla scorsa settimana, era bar IP, non foo .

Un sysadmin con OCD non è strettamente necessario per questo scenario; può anche avvenire con impostazioni IP dinamiche o con alcuni casi di bilanciamento del carico.

Soluzione: utilizza un editor di testo e rimuovi la voce incriminata dal tuo known_hosts (riga 14, nel tuo caso). Puoi anche usare il comando ssh-keygen -R <host> per rimuovere la voce specifica. La prossima volta che ti connetteresti, il client mostrerà un altro avvertimento (questa volta lamenta la assenza di qualsiasi chiave pubblica registrata per l'IP di destinazione), ma questo passerà quasi inosservato, perché ci sarà non essere affatto pronto. Il client SSH registrerà quindi la chiave pubblica nuovamente in known_hosts e sistemerà le cose, almeno finché l'amministratore di sistema non sentirà nuovamente le voci .

In alternativa, disabilita il controllo IP dell'host nel client SSH, impostando l'opzione CheckHostIP su no (nel% di sistema /etc/ssh/ssh_config o .ssh/config o direttamente sulla riga di comando:% codice%). I controlli IP dell'host sono utili per rilevare situazioni anomale di nomi di server erratici, ma per alcuni amministratori di sistema, il jugglery IP del server è perfettamente "normale".

    
risposta data 10.01.2012 - 13:48
fonte
10

Supponendo che indovino correttamente le parti <snip> , sembra che il nome host ( example.com ) si stia risolvendo su un indirizzo IP diverso da prima.

Se è necessario o meno preoccuparsi di ciò è difficile dirlo senza ulteriori informazioni. Quale forma è il nome host? È un FQDN? È risolto usando il DNS? Hai fatto qualche modifica al DNS? Questo tipo di informazioni.

Probabilmente è meglio sostituire gli hostname e gli IP con gli esempi ( example.com , example.net , example.org e anything-you-want.test sono buoni per gli hostname, IP privati come 192.168.foo.bar o 10.foo.bar.baz sono buoni per gli IP ), in questo modo l'output del comando è più semplice da interpretare. Puoi anche usare questo per indicare se due domini si trovano nello stesso TLD, se due IP si trovano nella stessa sottorete, ecc. Quindi è molto utile.

    
risposta data 10.01.2012 - 07:04
fonte
5

Se l'IP non è stato spostato e il pacchetto openssh-server non è stato aggiornato e una nuova chiave host è stata generata, allora cosa è successo?

Sebbene sia possibile disabilitare il controllo della chiave host, questa non è una pratica che vorrei iniziare.

Ciò che sembra essere accaduto è che ssh sta utilizzando un diverso sistema di chiavi host (ECDSA vs DSA o RSA) e l'avvertimento ci sta rendendo consapevoli di ciò.

    
risposta data 07.08.2012 - 18:02
fonte

Leggi altre domande sui tag