SSH : configuration du client
Le fichier ~/.ssh/config évite de retaper utilisateur, port et clé à chaque connexion. Les exemples utilisent des noms génériques.
Un alias par serveur
Section intitulée « Un alias par serveur »Host monserveur HostName serveur.exemple.com User deploy Port 22 IdentityFile ~/.ssh/id_ed25519 IdentitiesOnly yesEnsuite : ssh monserveur, scp fichier monserveur:/tmp/, rsync -az dossier/ monserveur:/srv/site/. Les droits du fichier doivent être restreints :
chmod 600 ~/.ssh/config| Directive | Rôle |
|---|---|
Host |
Alias (ou motif avec * et ?) |
HostName |
Nom ou adresse réels |
User, Port |
Compte et port |
IdentityFile |
Clé privée à utiliser |
IdentitiesOnly yes |
N’essayer que la clé indiquée (évite Too many authentication failures) |
Réglages communs à tous les serveurs
Section intitulée « Réglages communs à tous les serveurs »Les blocs sont lus dans l’ordre et, pour chaque directive, la première valeur rencontrée l’emporte : placer les blocs spécifiques avant Host *.
Host monserveur HostName serveur.exemple.com User deploy
Host * ServerAliveInterval 60 ServerAliveCountMax 3 AddKeysToAgent yes HashKnownHosts yes| Directive | Rôle |
|---|---|
ServerAliveInterval 60 |
Envoie un signal toutes les 60 s : évite les déconnexions par inactivité |
ServerAliveCountMax 3 |
Ferme la connexion après 3 signaux sans réponse |
AddKeysToAgent yes |
Charge la clé dans l’agent à la première utilisation |
HashKnownHosts yes |
Masque les noms des serveurs dans known_hosts |
Plusieurs comptes sur un même serveur (Git)
Section intitulée « Plusieurs comptes sur un même serveur (Git) »Host git-travail HostName git.exemple.com User git IdentityFile ~/.ssh/id_travail IdentitiesOnly yes
Host git-perso HostName git.exemple.com User git IdentityFile ~/.ssh/id_perso IdentitiesOnly yesLe dépôt se clone alors avec l’alias : git clone git@git-perso:equipe/projet.git.
Rebond par un serveur intermédiaire : ProxyJump
Section intitulée « Rebond par un serveur intermédiaire : ProxyJump »Host interne HostName 10.0.0.20 User deploy ProxyJump monserveurssh interne passe par monserveur automatiquement. En ligne de commande : ssh -J monserveur deploy@10.0.0.20. Voir Tunnels et rebonds.
Multiplexage : une seule connexion pour plusieurs sessions
Section intitulée « Multiplexage : une seule connexion pour plusieurs sessions »Host * ControlMaster auto ControlPath ~/.ssh/cm-%C ControlPersist 10mLa première connexion reste ouverte 10 minutes ; les suivantes (ssh, scp, rsync) la réutilisent instantanément, sans nouvelle authentification.
ssh -O check monserveur # la connexion maîtresse existe-t-elle ?ssh -O exit monserveur # la fermessh -O stop monserveur # n'accepte plus de nouvelles sessionsInclure d’autres fichiers
Section intitulée « Inclure d’autres fichiers »Include ~/.ssh/config.d/*.conf
Host monserveur HostName serveur.exemple.comInclude permet de ranger la configuration par projet. Le fichier d’inclusion doit être placé avant les blocs Host qui doivent le suivre (ou tout en haut du fichier).
Voir la configuration réellement appliquée
Section intitulée « Voir la configuration réellement appliquée »ssh -G monserveur # toutes les valeurs effectivesssh -G monserveur | grep -E "^(hostname|user|port|identityfile) "ssh -v monserveur # connexion détailléeServeurs connus : known_hosts
Section intitulée « Serveurs connus : known_hosts »ssh-keyscan -t ed25519 serveur.exemple.com # clé publique présentée par le serveurssh-keygen -F serveur.exemple.com # entrée connue pour ce serveurssh-keygen -R serveur.exemple.com # supprime l'entrée (après un changement légitime de clé)Réglage de la vérification (StrictHostKeyChecking) :
| Valeur | Comportement |
|---|---|
ask (défaut) |
Demande confirmation pour un nouveau serveur |
accept-new |
Accepte les nouveaux serveurs, refuse un changement de clé |
yes |
Refuse tout serveur inconnu |
no |
Accepte tout : à éviter (aucune protection contre l’usurpation) |
Options utiles en ligne de commande
Section intitulée « Options utiles en ligne de commande »ssh -o ConnectTimeout=5 -o BatchMode=yes monserveur true # test sans interaction (scripts)ssh -t monserveur sudo systemctl status ssh # force un terminal (commande interactive)ssh -A monserveur # transmet l'agent (prudence)ssh -X monserveur # affichage graphique distant (X11)ssh -N -f monserveur # connexion en arrière-plan, sans commandeDépannage
Section intitulée « Dépannage »| Symptôme | Piste |
|---|---|
Le bloc Host n’est pas pris en compte |
ssh -G alias : une valeur d’un bloc précédent l’emporte (première valeur rencontrée) |
Bad owner or permissions on ~/.ssh/config |
chmod 600 ~/.ssh/config |
Too many authentication failures |
Ajouter IdentitiesOnly yes et IdentityFile |
| La connexion multiplexée garde d’anciens réglages | ssh -O exit alias puis reconnecter |
ssh: Could not resolve hostname |
HostName incorrect, DNS ou typographie de l’alias |
Pour aller plus loin
Section intitulée « Pour aller plus loin »- Manuel :
man ssh_config - Suite : Durcissement du serveur