====== SSH known_hosts ======
Con una **Debian 13 Trixie** può capitare di avere delle righe in **.ssh/known_hosts** che vengono ritenute non più valide, il problema si presenta ad esempio quando si cerca di rimuovere una entry con il comando **%%ssh-keygen -R%%**:
ssh-keygen -f '/home/user/.ssh/known_hosts' -R '178.47.31.131'
/home/user/.ssh/known_hosts:341: invalid line
/home/user/.ssh/known_hosts:365: invalid line
# Host 178.47.31.131 found: line 517
/home/user/.ssh/known_hosts:796: invalid line
/home/user/.ssh/known_hosts is not a valid known_hosts file.
Not replacing existing known_hosts file because of errors
Il risultato è che il comando -R fallisce e per rimuovere la riga non più desiderata (la 517 nell'esempio sopra) si dovrebbe editare manualmente il file ''known_hosts''.
Nel nostro caso il problema è causato da righe che contengono chiavi di tipo **ssh-dss**:
grep ssh-dss .ssh/known_hosts
|1|LGxo8EdPByFvfeW7VZEl7LrbNyY=|1tQVyMCPFs+t+fhf4sLENTzogec= ssh-dss AA...
|1|LcdQ2I9+yt+thkZh+R0dTZ22FH4=|ndNatDEgK+CaZJA/abDGaqKCEes= ssh-dss AA...
|1|z67A0kXdxyGJyyz4Y3ML6g330dA=|AnEIGJLOSFA+07RH8SH4GaSl4KY= ssh-dss AA...
Il supporto alle chiavi **ssh-dss** è stato rimosso a runtime con **OpenSSH 7.0** (agosto 2015), quindi rimosso in fase di compilazione con **OpenSSH 9.8 (**2024) e rimosso definitivamente con **OpenSSH 10.0** (inizio 2025).
Se il problema occorre su una Debian 12 Bookworm (OpenSSH 9.2) dovrebbe quindi ancora essere possibile supportare le chiavi ssh-dss aggiungendo in **.ssh/config** la seguente riga:
PubkeyAcceptedKeyTypes=+ssh-dss
Con debian 13 Trixie (OpenSSH 10.0) è invece consigliabile rimuovere del tutto tali righe che non sarebbero comunque più utilizzabili.
===== Formato del file known_hosts =====
Il formato del file **.ssh/known_hosts** è documentato in **%%man sshd%%**. Ogni riga contiene campi separati da spazi, il primo è il nome dell'host in formato hashed, quindi non è possibile conoscere il suo contenuto in chiaro.
È tuttavia possibile fare una ricerca sul file known_hosts indicando il nome dell'host in chiaro, viene mostrata la riga che corrisponde:
ssh-keygen -H -F servername
# Host servername found: line 697
|1|z4sz31Qvp0GlXlCt1nIAPtrymdQ=|XnJIMUA/Dajlw9+gb36XCRv6m14= ecdsa-sha2-nistp256 AA...
**ATTENZIONE**: Riferendosi allo stesso host ma con nomi diversi (nome non qualificato, nome completo a dominio, indirizzo IPv4, indirizzo IPv6, ecc.) le righe in known_hosts sono diverse, ma contengono la stessa chiave.
Un host con **sshd** può avere più di una chiave pubblica, il client ne sceglie una e la memorizza nel proprio .ssh/known_hosts, di solito scegliendo quella più sicura che è in grado di supportare.
Per elencare le chiavi di un sshd remoto si usa il comando:
ssh-keyscan servername