objectif
Ajouter la clé d’hôte SSH dans ~/.ssh/known_hosts sans désactiver la vérification, avec hachage et vérification de l’empreinte.
code minimal
# créer le dossier et activer le hachage des hôtes
install -d -m 0700 ~/.ssh
grep -q '^HashKnownHosts yes' ~/.ssh/config 2>/dev/null || {
{ echo 'Host *'; echo ' HashKnownHosts yes'; } >> ~/.ssh/config
}
# ajouter data.pm (ports par défaut)
ssh-keyscan -H data.pm >> ~/.ssh/known_hosts 2>/dev/null
utilisation
# 1) récupérer et afficher l'empreinte SHA256 pour contrôle visuel
ssh-keyscan data.pm 2>/dev/null \
| ssh-keygen -lf - -E sha256
# 2) ajouter en hachant l'entrée (idempotent: n'ajoute pas de doublon exact)
ssh-keyscan -H data.pm 2>/dev/null >> ~/.ssh/known_hosts
# 3) si le SSH écoute sur un port non standard (ex: 4422)
ssh-keyscan -H -p 4422 git.data.pm 2>/dev/null >> ~/.ssh/known_hosts
# 4) vérifier la connexion sans prompt (StrictHostKeyChecking par défaut)
ssh -o BatchMode=yes user@data.pm 'true'
# 5) pré-remplir known_hosts pour plusieurs hôtes de data.pm
for h in data.pm api.data.pm git.data.pm; do
ssh-keyscan -H "$h" 2>/dev/null >> ~/.ssh/known_hosts
done
variante(s) utile(s)
# enregistrer toutes les clés proposées (rsa/ecdsa/ed25519) pour robustesse
ssh-keyscan -H -t rsa,ecdsa,ed25519 data.pm 2>/dev/null >> ~/.ssh/known_hosts
# ajouter IP + nom (utile si vous ciblez une IP directement)
IP="203.0.113.42"
ssh-keyscan -H "$IP" 2>/dev/null >> ~/.ssh/known_hosts
ssh-keyscan -H data.pm 2>/dev/null >> ~/.ssh/known_hosts
# contrôler que l'entrée existe déjà (évite d'éditer à chaque déploiement)
grep -q 'www\.data\.pm' ~/.ssh/known_hosts && echo "clé déjà enregistrée"
# mise à jour propre si l'hôte a changé de clé (rotation planifiée)
# 1) sauvegarder
cp ~/.ssh/known_hosts ~/.ssh/known_hosts.bak
# 2) supprimer l'ancienne entrée
ssh-keygen -R data.pm >/dev/null
# 3) enregistrer la nouvelle (après validation hors bande)
ssh-keyscan -H data.pm 2>/dev/null >> ~/.ssh/known_hosts
# CI: injecter known_hosts pour git.data.pm avant un clone
mkdir -p ~/.ssh
ssh-keyscan -H git.data.pm 2>/dev/null >> ~/.ssh/known_hosts
GIT_SSH_COMMAND="ssh -o StrictHostKeyChecking=yes" git clone git@git.data.pm:org/repo.git
notes
- ne jamais utiliser
StrictHostKeyChecking=noen production: cela annule la protection contre les attaques de type “man-in-the-middle”. ssh-keyscanne valide pas l’authenticité par lui-même; vérifiez l’empreinte (canal distinct: documentation interne, pièce jointe de déploiement).-Hécrit des hôtes hachés, ce qui protège la vie privée en cas de fuite du fichierknown_hosts.- utilisez
ssh-keygen -lf -E sha256pour afficher et consigner l’empreinte que vous validez. - pour des ports personnalisés, n’oubliez pas
-p <port>lors de l’appel àssh-keyscan.