Ignora temporaneamente il mio file `~ / .ssh / known_hosts`?


48

C'è un modo per ignorare temporaneamente il mio ~/.ssh/known_hostsfile?

mbp:~ alexus$ ssh 10.52.11.171
@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
@    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
xx:xx:xx:xx:xx:xx:xx:xx:xx:xx:xx:xx:xx:xx:xx:xx.
Please contact your system administrator.
Add correct host key in /Users/alexus/.ssh/known_hosts to get rid of this message.
Offending RSA key in /Users/alexus/.ssh/known_hosts:155
RSA host key for 10.52.11.171 has changed and you have requested strict checking.
Host key verification failed.
mbp:~ alexus$ 

NOTA:

.. da alcune risposte / commenti / i mi rendo conto che la mia domanda è un po 'fuorviante, così breve è il comportamento previsto), quindi è normale (nel mio caso) c'è una ragione valida dietro perché voglio vedere "ignoralo")


9
Stai facendo la domanda sbagliata. Non dovresti "ignorare" il problema; dovresti capire cosa sta succedendo e risolverlo.
Michael Hampton

9
Non posso parlare per l'utente, ma un esempio potrebbe essere una situazione in cui si sta sviluppando un processo di installazione automatizzato (come un kickstart), in cui il flusso di lavoro iterativo prevede la creazione, la connessione, il test, la modifica del processo di compilazione e la ricostruzione da graffiare ancora e ancora.
Goladus,

10
@MichaelHampton - Ricevo tutto questo in quanto VMware e VirtualBox riciclano gli indirizzi IP per gli ospiti. Per me, è la domanda corretta :)

1
FWIW Continuo a cercare questa risposta perché nella mia LAN ho un sistema in cui utilizzo un dropbear (con una chiave host diversa) per inserire la password di crittografia del disco durante l'avvio.
Zulan,

1
@jww Questa è la domanda / soluzione sbagliata per il tuo scenario. Dovresti invece configurare SSH per ignorare l'indirizzo IP ma verificare comunque la chiave host. Vedi ad esempio qui
Jon Bentley il

Risposte:


56

È possibile utilizzare ssh -o StrictHostKeyChecking=noper disattivare known_hostsmomentaneamente il controllo . Ma sconsiglio. Dovresti davvero controllare perché la chiave host è cambiata.

Un'altra opzione è quella di aggiungere una voce specifica al tuo ~/.ssh/configper l'host in questione. Questo potrebbe essere un approccio valido se si dispone di un determinato host che genera nuove chiavi host ogni volta che si riavvia e viene riavviato per un motivo valido più volte al giorno.

Host <your problematic host>
  StrictHostKeyChecking no

questo è un comportamento previsto) quindi è normale (nel mio caso)
alexus

1
@alexus Se è "previsto", è possibile applicare l'opzione a un nome host / IP specifico per il quale si prevede che accada.
Chrylis -on strike-

1
@alexus E ricorda che se lo fai, perdi praticamente tutta la protezione che ssh offre. Potresti anche usare telnet, poiché sarebbe banale per qualcuno MITM e catturare tutto il tuo traffico.
Michael Hampton

1
Questo non funziona più (almeno per OpenSSH_5.3p1)
entro il

-o StrictHostKeyChecking=norimuove la possibilità di accedere con una password. La mancanza di una bandiera per questo non va direttamente contro i principi unix di consentire all'utente di forzare il comportamento? Attualmente sto provando ad accedere a un computer locale con un IP locale. La chiave host è cambiata perché ho riformattato la macchina. Tutto qui ha senso e nulla è un rischio per la sicurezza in queste circostanze.
Wowfunhappy,

31

Per ignorare completamente il file degli host noti in un ambiente POSIX, impostare le opzioni GlobalKnownHostsFilee UserKnownHostsFilesu /dev/null:

ssh -o GlobalKnownHostsFile=/dev/null -o UserKnownHostsFile=/dev/null user@host

L'impostazione StrictHostKeyChecking=nodell'opzione ti consentirà di connetterti ma SSH mostrerà comunque un avviso :

ssh -o StrictHostKeyChecking=no user@host

Come altri hanno notato, probabilmente è meglio affrontare il problema di fondo. Ad esempio, è possibile prendere in considerazione l' autenticazione con certificato SSH per verificare gli host.


2
Questa può essere una risposta migliore di quella attualmente con il punteggio più alto perché consente di utilizzare l'autenticazione con password che sarebbe disabilitata altrimenti (ovviamente, dovresti capire cosa stai facendo esattamente prima di digitare la password ...)
VZ.

Sono un po 'confuso qui: non si dovrebbe anche usare -o StrictHostKeyChecking=no in aggiunta alle le -o GlobalKnownHostsFile=/dev/null -o UserKnownHostsFile=/dev/nullopzioni - per una risposta definitiva di?: ssh -o GlobalKnownHostsFile=/dev/null -o UserKnownHostsFile=/dev/null -o StrictHostKeyChecking=no user@host?
Gabriel Staples,

Scrittura correlata che ho trovato online: shellhacks.com/disable-ssh-host-key-checking
Gabriel Staples

5

Se il server è stato reinstallato e pertanto l'identificazione è stata modificata, è sufficiente eliminare la riga 155 specificata /Users/alexus/.ssh/known_hostse procedere.

Se si passa da una rete all'altra, è necessario utilizzare nomi host per connettersi, poiché il client ssh salverà anche le chiavi in ​​base al nome host. Aggiungi qualcosa di simile al tuo /etc/hosts:

10.52.11.171 server1
10.52.11.171 server2

e quindi utilizzare ssh server1quando connesso alla sottorete 1 e ssh server2quando connesso alla sottorete2. In questo modo, entrambi i server possono avere hostkey differenti.


Cosa succede se si passa tra due reti private e ci si connette a due stessi IP?
alexus

1
Ho modificato la mia risposta.
Etagenklo,

2
@alexus Allora hai bisogno di IPv6 :) Ma quelle sarebbero state informazioni utili nella tua domanda originale.
Michael Hampton

2

-o StrictHostKeyChecking=no funziona solo se l'host non è già presente nel file known_hosts.

Penso che sia più pulito (nessun avvertimento), se ti aspetti che la chiave degli host cambi a causa forse della clonazione di vm, imporre di ignorare quel tipo di host in questo modo:

# Handle possible SSH key changes
host_key=$(ssh-keyscan -t rsa ${host_ip})
grep "${host_key}" ~/.ssh/known_hosts >/dev/null || {
    ssh-keygen -R ${host_ip}
    echo ${host_key} >>  ~/.ssh/known_hosts
}

# connect as normal way
ssh root@${host_ip} "hostname"

2

Alcune persone dicono che non è giusto, non devi fare questo e così via, ma ho bisogno di questo anche per testare ancora e ancora un paio di dispositivi integrati. È necessario disabilitare StrictHostKeyChecking=no, questo è giusto, ma ripristinare anche il file hosts noto su /dev/null. Ecco un esempio con autologin e pssul dispositivo remoto.

sshpass -p pass ssh -o StrictHostKeyChecking=no -o UserKnownHostsFile=/dev/null user@host 'ps ax'

-2

Accedi a tutti i tuoi server (e se RedHat) rm -f /etc/ssh/ssh_host_*e quindi riavvia SSHD.

Ciò creerà nuove chiavi host SSH che non devono essere ignorate.

Mi viene in mente solo un'istanza in cui le chiavi SSH clonate su più server non sono solo desiderate, ma non generano alcun avviso. Multipli di un record A. Tutti gli host con il record A hanno la stessa chiave.


6
Questa risposta non è corretta L'impronta digitale è locale sul client.
89c3b1b8-b1ae-11e6-b842-48d705
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.