Comment gérer mon fichier .ssh / known_hosts


47

J'exécute un poste de travail Ubuntu avec un ensemble de serveurs virtuels dans Virtual Box pour tester des éléments, etc. Par le passé, je me connectais également à d'autres types de boîtes VPS Linux distantes. Actuellement, mon .ssh/known_hostsfichier contient tout un tas de clés, dont la plupart ne sont plus utilisées.

Je souhaite nettoyer mon .ssh/known_hostsfichier, mais comment savoir quelle clé appartient à quel hôte? Comment savoir quelles sont les clés que je peux retirer en toute sécurité et celles que je devrais laisser seules?

Réponses:


64

Pour savoir quelle entrée correspond à un nom d’hôte connu dans known_hosts:

 # ssh-keygen -H  -F <hostname or IP address>

Pour supprimer une seule entrée de known_hosts:

 # ssh-keygen -R <hostname or IP address>

27

Si vous avez une liste de tous vos hôtes, vous pouvez faire quelque chose comme:

ssh-keyscan -t rsa,dsa -f list_of_hosts > ~/.ssh/known_hosts

Cela écrasera votre fichier .ssh / known_hosts par un fichier nouvellement généré basé sur l'analyse des hôtes.

Et faites aussi ce que suggère l’autre réception; HashKnownHosts est plus ennuyeux que de l'aide ici.


ssh-keyscana une très stricte règles de formatage du list_of_hostsfichier. Il doit s'agir uniquement de l'adresse et d'aucun autre espace, puis de LF après chaque adresse. Cela inclut LF après la dernière adresse. Sinon, vous aurez beaucoup de déchets dans le fichier généré.
Nux

21

Avec difficulté...

Ubuntu par défaut hache les noms d’hôte du fichier known_hosts (il ne s’agit pas du comportement openssh par défaut), ce qui rendra difficile pour quiconque lisant le fichier de savoir à quels systèmes vous accédez.

Si vous voulez vraiment nettoyer le fichier, la solution la plus simple est probablement de le supprimer et de vérifier les clés des serveurs que vous connaissez au fur et à mesure qu'ils se présentent, mais je ne laisserais vraiment rien à known_hosts.

Vous pouvez empêcher le hachage de nouvelles entrées d'hôtes en commentant l'option dans / etc / ssh / ssh_config

#HashKnownHosts yes

Nettoyer ~ / .ssh / known_hosts est également utile lorsque la configuration de l'hôte distant change et que ssh affiche un avertissement. Cependant, il faut être prudent avec cela et ignorer le warnnig uniquement pour les hôtes approuvés.
Alex

6
Une meilleure option pourrait être d’expliquer comment générer le hachage pour un nom d’hôte spécifique, en lui permettant de rechercher ce hachage dans le fichier known_hosts afin qu’il puisse le mettre à jour.
Cerin

1
Après la modification ci-dessus, ajoutez simplement une nouvelle entrée, par exemple en vous connectant au nouveau serveur avec ssh root@something-new-or-new-dns-alias. Cela actualisera le known_hostsfichier d' origine et décryptera les noms d'hôte / IP.
Nux

2

J'avais plus de 300 anciennes entrées périmées dans mon fichier known_hosts. Pas sûr que cela fonctionne pour tous les systèmes (ou même la plupart des systèmes), mais voici mon script Q & D. Vous devrez peut-être ajuster les chaînes ou l'emplacement correspondants.

#!/bin/sh
list=`cat ~/.ssh/known_hosts | awk '{print $1}' |sed -e 's/,/ /g' | sort -u `

listsorted=$(printf "%s\n" ${list[@]} | sort -u)
echo $listsorted
#listsorted="10.2.10.1"
echo > /tmp/sshstat.txt
for host in $listsorted ;
do
echo $host 
ssh -oBatchMode=yes -oConnectTimeout=2  root@${host} "exit" >/tmp/sshstat.txt 2>&1 
ret=$?
if [ $ret -ne 0 ]; then
     echo "Failed: $host"
     echo sed -i.bak \"/$host/d\" "~/.ssh/known_hosts" | sh
else
    grep "Offending RSA" /tmp/sshstat.txt |  sed -e 's/:/ /g' | awk '{printf "sed -i.bak -e \"%dd\" %s  \n", $6, "~/.ssh/known_hosts" }' | sh
   fi
done
#echo $list

Cela ne fonctionne pas sur un known_hostsfichier haché , et puisque l'interrogateur demande: "Comment puis-je savoir quelle clé appartient à quel hôte?" Je pense qu'il est très probable que son fichier soit haché. Il dit qu'il est sur Ubuntu, et comme theotherreceivedit, Ubuntu se hache par défaut.
Neil Mayhew
En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.