E 'possibile rimuovere una particolare chiave host dal file known_hosts di SSH?

243

È possibile rimuovere una particolare chiave host dal file known_hosts di SSH?

Di solito finisco per cancellare l'intero file known_hosts , che non ho problemi a fare, ma solo per curiosità, è possibile rimuovere solo una singola voce?

Ho aperto il file known_hosts , ma non riesco a comprenderne il contenuto.

Di seguito è il messaggio che ho affrontato, che mi ha portato a porre questa domanda:

Add correct host key in /home/wissen16/.ssh/known_hosts to get rid of this message.
Offending key in /home/wissen16/.ssh/known_hosts:1
RSA host key for foo.com has changed and you have requested strict checking.
Host key verification failed.
    
posta theTuxRacer 10.01.2011 - 06:56

6 risposte

416

Utilizzare questo comando per rimuovere le voci da known_hosts:

ssh-keygen -R hostname
    
risposta data Takkat 10.01.2011 - 08:43
27

Sì, puoi rimuovere solo una chiave. Basta aprirlo in un editor ed eliminare la riga incriminata. Il numero dopo i due punti nel messaggio di errore è il numero di riga, quindi quella è la riga da eliminare - la riga 1 nell'esempio.

    
risposta data Mike Scott 10.01.2011 - 07:00
17

Solo di recente ho iniziato a usare la chiave dell'host, ma quando li ho incasinati è generalmente una chiave per riga, quindi copia il file e rimuovili uno alla volta finché non trovi quello giusto. Quindi aggiungi gli altri indietro. Un bel po 'di strada da fare, ma dovrebbe funzionare.

Anche in base a quell'errore, e senza alcuna idea di cosa sia, potrebbe essere la prima chiave dell'host nel file che è il problema, quindi apri il file con vim

vim ~/.ssh/known_hosts

e premi

dd

quindi salvalo.

    
risposta data percent20 10.01.2011 - 07:01
2

L'uso di ssh-keygen -R hostname non funzionerà sempre. Se si dispone di una versione più recente di SSH che "nasconde" gli hostname per impedire il dirottamento di ssh-agent, apparentemente ssh-keygen non è in grado di rimuovere il nome host.

Ad esempio, ho un host chiamato build-node-01 e mi sono collegato ad esso e ho accettato la chiave. Quindi lo ricostruisco da zero, ottenendo una nuova impronta digitale host e provo a ricollegarmi, ricevo un avviso che c'è un conflitto sulla linea X (per esempio 3). Eseguo ssh-keygen -R hostname , ma la prossima volta che provo a connettermi ricevo comunque un avviso che c'è un conflitto. Ho esaminato il file solo per scoprire che il nome host è stato sottoposto a hash e visualizzato come [1] [email protected]@4D0M57uFF anziché come nome host leggibile.

In questo caso l'unico modo per rimuovere con successo l'host incriminato era usare

sed -i 'xd' ~/.ssh/known_hosts

Per fare un passo avanti, potresti voler fare un backup di known_hosts nel caso in cui elimini la riga sbagliata, in questo caso aggiungi un .bak (o qualsiasi estensione) all'opzione -i per creare un backup con tale estensione. L'uso di ssh-keygen lo fa automaticamente.

sed -i.bak 'xd' ~/.ssh/known_hosts
    
risposta data dragon788 24.03.2015 - 23:24
1

Solo per condividere un'altra risposta semplice e pulita che ho appena trovato. Rimozione del nome host è fuori per me, come il file known_hosts è hash. Tuttavia, POTREI modificare manualmente la voce host in base al numero di riga nel messaggio di errore. Come notato in precedenza da Mike Scott, il numero di riga dell'hostname è presente nel messaggio di errore.

Oppure, posso farlo. Da qui: come correggere la chiave offendente nel file ssh known_hosts

Ho ricevuto questo bit di cli magic

sed -i 'xd' ~/.ssh/known_hosts

Sostituisci la x con il numero di riga e voilà. Offre anche una risposta perl se il sed non funzionerà.

    
risposta data Corvus B 20.02.2014 - 01:37
0
sed '/10\.20\.120\.211/d' ~/.ssh/known_hosts > temp && mv temp ~/.ssh/known_hosts

In questo caso, 10.20.120.211 è l'host che voglio eliminare dal mio file known_hosts, assicurati di sfuggire ai caratteri speciali come (.)

    
risposta data Shan Valleru 20.02.2014 - 02:32

Leggi altre domande sui tag