GNU/Linux >> Linux Esercitazione >  >> Linux

Nozioni di base sull'amministratore di sistema Linux:risoluzione dei problemi degli host_noti

SSH è facile da usare ed è generalmente privo di problemi. Ma c'è questo piccolo file nella tua home directory che può diventare un raro punto dolente per questo protocollo e strumento onnipresente. L'entità incriminata è il ~/.ssh/known_hosts file. Se non lo sapevi, dovresti familiarizzare ora. Questo file verrà fuori ad un certo punto della tua carriera.

Se hai mai visto il seguente messaggio, puoi andare fuori di testa perché qualcuno sta tentando di hackerarti, oppure puoi renderti conto che DHCP o qualche altra anomalia ti ha fatto un atto sporco e poco costoso:

$ ssh 192.168.1.84

@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
@    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:I02UyJs2vS0ym4jWn5upAWZDqwu5RjMg4aM9hPq8G1k.
Please contact your system administrator.
Add correct host key in /Users/khess/.ssh/known_hosts to get rid of this message.
Offending ECDSA key in /Users/khess/.ssh/known_hosts:4
ECDSA host key for 192.168.1.84 has changed and you have requested strict checking.
Host key verification failed.

Quello che è successo qui è che hai tentato di connetterti a un sistema che non ha più l'indirizzo IP 192.168.1.84. Un sistema diverso ha quell'indirizzo IP e SSH si lamenta del fatto che potresti essere violato. La realtà è spesso molto meno eccitante. I tuoi known_hosts il file potrebbe non essere sincronizzato con la realtà dell'host reale.

Molteplici cose possono causare questo gioco di sedie musicali con indirizzo IP. Uno dei sistemi potrebbe essere stato inattivo per un lungo periodo di tempo e quando il contratto di locazione di un altro era scaduto, ha afferrato il successivo indirizzo IP disponibile. Un evento di patch e il successivo riavvio hanno fatto sì che alcuni dei tuoi sistemi acquisissero indirizzi IP diversi. Il sistema potrebbe essere stato reinstallato e generata una nuova identità, o forse qualcuno ha dato un'idea e ha fornito indirizzi IP statici ai tuoi sistemi server. (Secondo me tutti i server dovrebbero avere indirizzi IP statici. Lo stesso vale per tutti i componenti di supporto, come router, switch, punti di accesso, dispositivi IoT, telecamere, sistemi per sale conferenze e persino stampanti. Solo i dispositivi degli utenti finali dovrebbero avere il dubbio privilegio di acquisire indirizzi IP casuali. Ho le mie ragioni per questa forte opinione, che condividerò in un altro articolo più avanti.)

Indipendentemente da come è successo, il sistema a cui eri interessato a connetterti ha un nuovo indirizzo IP. Uno noto anche al tuo sistema, ma con un'impronta digitale diversa.

I suddetti known_hosts file è un semplice file di testo che risiede all'interno di una directory nascosta (.ssh ) nella tua home directory. Per visualizzarne il contenuto, inserisci il seguente comando:

$ cat .ssh/known_hosts

192.168.1.97 ecdsa-sha2-nistp256 AAAAE2VjZHNhLXNoYTItbmlzdHAyNTYAAAAIbmlzdHAyNTYAAABBBMJWpXf8Ou/XJ1Q5YcIS5Me4GgN1F7AYHbvIPayfGqwd90kvhQygrPCYEqVdw44lEOIZe+DEKP4F6Otdt38yf68=

192.168.1.101 ecdsa-sha2-nistp256 AAAAE2VjZHNhLXNoYTItbmlzdHAyNTYAAAAIbmlzdHAyNTYAAABBBJRNTZm8M9IYYN3uJL/yCPv4EJRMDZkkcnt1CY8L6OR84wstYdhqtNqV0v/LQiz/AoRbHKxPTdjXfIOrc1vYDHc=

ken,192.168.1.69 ecdsa-sha2-nistp256 AAAAE2VjZHNhLXNoYTItbmlzdHAyNTYAAAAIbmlzdHAyNTYAAABBBB53lh2RyFiMfJFKBkLa643lS4GGILG6oVGq33KyBSgaDU2ZHryYak1FU1HcPa6Xb/xYqEUugv9cOXFRwajbrmg=

192.168.1.84 ecdsa-sha2-nistp256 AAAAE2VjZHNhLXNoYTItbmlzdHAyNTYAAAAIbmlzdHAyNTYAAABBBMGjMsJPX4bfdEnVy59Uf2VhH1oAt7Zemd5bfSoSGxX69HBcjkekO/LkEZUlhVplBlHFqJBqs2gWYp3zVDCTwr4=

192.168.1.64 ecdsa-sha2-nistp256 AAAAE2VjZHNhLXNoYTItbmlzdHAyNTYAAAAIbmlzdHAyNTYAAABBBIkK9WylcZcgjT7gUz9DMLehUBApION1CLiBVc3Pa/YfAbIDUlIWta12zL5B12RmBXgoYvntdW5rcowPiqjL0/o=

La soluzione più semplice a questo problema è rimuovere known_hosts file e consenti la generazione di nuove chiavi per ogni host a cui ti connetti. Per questa dimostrazione, rimuovo il 192.168.1.84 voce da known_hosts file e quindi connettiti al nuovo host a quell'indirizzo, in modo da poter vedere un confronto di ciò che accade nel processo. Per prima cosa, rimuovi un known_hosts voce con il ssh-keygen comando:

$ ssh-keygen -R 192.168.1.84 -f .ssh/known_hosts

 Host 192.168.1.84 found: line 4
.ssh/known_hosts updated.
Original contents retained as .ssh/known_hosts.old

La voce originale viene salvata in .ssh/known_hosts.old nel caso ce ne fosse bisogno in futuro.

Dopo aver rimosso il 192.168.1.84 voce da  known_hosts file, ho tentato di nuovo la connessione all'host 192.168.1.84 :

$ ssh 192.168.1.84
The authenticity of host '192.168.1.84 (192.168.1.84)' can't be established.
ECDSA key fingerprint is SHA256:I02UyJs2vS0ym4jWn5upAWZDqwu5RjMg4aM9hPq8G1k.
Are you sure you want to continue connecting (yes/no)? yes

Warning: Permanently added '192.168.1.84' (ECDSA) to the list of known hosts.

Puoi vedere che la chiave che ho aggiunto ora corrisponde a quella elencata nell'errore all'inizio dell'articolo. Per verificare la chiave di un host, emetti il seguente comando sull'host remoto:

$ ssh-keygen -lf /etc/ssh/ssh_host_ecdsa_key.pub
256 SHA256:I02UyJs2vS0ym4jWn5upAWZDqwu5RjMg4aM9hPq8G1k no comment (ECDSA)

Conclusione

A meno che tu non utilizzi indirizzi IP statici e i tuoi sistemi non cambino mai, ad un certo punto della tua carriera avrai questo problema. Mi succede sempre perché creo e distruggo macchine virtuali più volte al mese. In effetti, succede così spesso che ormai dovrei avere uno script che rimuove i known_hosts file all'inizio di ogni mese.

Idealmente, non dovresti mai rimuovere una voce da known_hosts file (o l'intero file). Ma se devi, hai appena imparato a farlo.

Da asporto:known_hosts , ssh-keygen

[Vuoi provare Red Hat Enterprise Linux? Scaricalo ora gratuitamente.]


Linux
  1. Risoluzione dei problemi hardware in Linux

  2. Nozioni di base sui permessi dei file Linux

  3. I miei 5 strumenti di amministrazione di sistema Linux preferiti

  4. Risoluzione dei problemi di Linux 101:prestazioni del sistema

  5. Nozioni di base sui comandi di Linux:printf

Una guida per principianti alla risoluzione dei problemi di rete in Linux

Nozioni di base sull'amministratore di sistema Linux:avvia NIC all'avvio

Nozioni di base sulla riga di comando di Linux:sudo

Strumenti di amministratore di sistema:exa, una moderna alternativa a ls in Linux

Introduzione di un amministratore di sistema Linux a cgroups

Nozioni di base sul legame Ethernet in Linux