Aller au contenu
Administration Linux medium

Se connecter en SSH : guide du client OpenSSH

10 min de lecture

ssh est la porte d’entrée de tout serveur Linux en production. La connexion basique ssh user@host suffit pour commencer, mais dès que vous gérez plusieurs serveurs, plusieurs clés ou un bastion, la configuration du client devient indispensable. Ce guide couvre tout : de la première connexion jusqu’aux techniques utilisées à l’examen LFCS et RHCSA.

C’est un objectif direct LFCS (domaine Networking — “Configure the OpenSSH server and client”) et RHCSA (domaine Manage Security — “Configure key-based authentication for SSH”).

  • Établir une connexion SSH de base avec utilisateur, port et clé
  • Créer et utiliser un fichier ~/.ssh/config avec des alias de connexion
  • Rebondir sur un serveur via un bastion avec ProxyJump
  • Accélérer les reconnexions avec ControlMaster
  • Diagnostiquer une connexion qui échoue avec -v / -vvv
  • Gérer les empreintes avec known_hosts et éviter les faux positifs MitM
SituationTechnique
Se connecter à 10 serveurs avec des ports et clés différents~/.ssh/config avec aliases
Atteindre un serveur interne via un bastion publicProxyJump
Exécuter des scripts Ansible ou rsync sans saisir de mot de passeclé SSH + ssh-agent
Connexions répétées lors d’un déploiementControlMaster (multiplexage)
Connexion refusée après rebuild d’une VMnettoyer known_hosts
Déboguer un refus d’authentificationssh -vvv user@host
Fenêtre de terminal
ssh bob@192.168.1.10

SSH se connecte sur le port 22 avec l’utilisateur bob. Si aucune clé n’est trouvée, il demande le mot de passe.

Fenêtre de terminal
# Port non standard
ssh -p 2222 bob@192.168.1.10
# Clé privée spécifique
ssh -i ~/.ssh/id_ed25519_backup bob@backup.example.com
# Mode verbose (debug léger)
ssh -v bob@192.168.1.10

Vérifier que la connexion est établie :

Fenêtre de terminal
# Sur le serveur distant après connexion
whoami
hostname
uptime

Au premier contact, SSH affiche l’empreinte du serveur :

The authenticity of host '192.168.1.10 (192.168.1.10)' can't be established.
ED25519 key fingerprint is SHA256:xxxx...
Are you sure you want to continue connecting (yes/no/[fingerprint])?

Tapez yes pour mémoriser l’empreinte dans ~/.ssh/known_hosts. SSH refusera la connexion si l’empreinte change à l’avenir — c’est intentionnel (protection MitM).


Le fichier ~/.ssh/config permet de définir des alias de connexion avec tous leurs paramètres. C’est la façon propre de gérer plusieurs serveurs.

Host webserver
HostName 192.168.1.20
User deploy
Port 2222
IdentityFile ~/.ssh/id_ed25519_deploy
Host db
HostName 10.0.1.5
User dbadmin
IdentityFile ~/.ssh/id_ed25519_db

Avec cette config, ssh webserver est équivalent à ssh -p 2222 -i ~/.ssh/id_ed25519_deploy deploy@192.168.1.20.

Host *
ServerAliveInterval 60
ServerAliveCountMax 3
Compression yes
IdentityFile ~/.ssh/id_ed25519

ServerAliveInterval 60 envoie un keepalive toutes les 60 s — évite les déconnexions sur les sessions inactives. Ces options s’appliquent à tous les hôtes, sauf surcharge par un bloc Host spécifique.

DirectiveRôle
HostAlias de connexion
HostNameAdresse réelle ou FQDN
UserUtilisateur distant
PortPort SSH (défaut : 22)
IdentityFileChemin de la clé privée
ServerAliveIntervalKeepalive (secondes)
ServerAliveCountMaxTentatives avant coupure
CompressionCompression des données
ForwardAgentTransfert de l’agent SSH
StrictHostKeyCheckingVérification d’empreinte
ProxyJumpRebond via bastion
ControlMasterMultiplexage de connexion
ControlPathSocket du multiplexage
ControlPersistDurée de vie du master

Dans une architecture typique, les serveurs internes ne sont pas accessibles directement depuis Internet. On passe par un bastion (aussi appelé jump host).

[Workstation] → [bastion:22] → [internal-server:22]
Host bastion
HostName bastion.example.com
User jumpuser
IdentityFile ~/.ssh/id_ed25519
Host internal
HostName 10.0.1.50
User admin
ProxyJump bastion
IdentityFile ~/.ssh/id_ed25519
Fenêtre de terminal
# Connexion directe au serveur interne
ssh internal

SSH établit d’abord la connexion au bastion, puis rebondit automatiquement vers internal. Vous n’avez pas besoin de copier votre clé sur le bastion — le ForwardAgent yes n’est pas nécessaire avec ProxyJump.

Fenêtre de terminal
ssh -J jumpuser@bastion.example.com admin@10.0.1.50
Host deep-server
HostName 10.1.2.3
User admin
ProxyJump bastion,intermediate

Lors d’un déploiement ou d’une série de commandes, SSH établit une nouvelle connexion TCP + authentification à chaque appel. ControlMaster permet de réutiliser une connexion existante — la première connexion crée un socket, les suivantes l’empruntent.

Host *.example.com
ControlMaster auto
ControlPath ~/.ssh/cm-%r@%h:%p
ControlPersist 10m
  • ControlMaster auto : utilise une connexion existante si possible, en crée une sinon
  • ControlPath : chemin du socket Unix (utilise des variables %r user, %h host, %p port)
  • ControlPersist 10m : le socket reste ouvert 10 min après la dernière session

Résultat : rsync, scp ou ansible sur le même hôte sont quasi-instantanés après la première connexion.


Quand une VM est reconstruite ou une IP réaffectée, la clé d’hôte change. SSH affiche :

@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
@ WARNING: REMOTE HOST IDENTIFICATION HAS CHANGED! @
@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@

Supprimer l’ancienne entrée :

Fenêtre de terminal
ssh-keygen -R 192.168.1.10
# ou
ssh-keygen -R hostname.example.com

SSH demande ensuite de confirmer la nouvelle empreinte au prochain ssh.

Fenêtre de terminal
ssh-keyscan -H 192.168.1.10 >> ~/.ssh/known_hosts

Utile dans les scripts d’automatisation pour pré-peupler known_hosts avant le premier ssh.

Désactiver la vérification (environnements éphémères uniquement)

Section intitulée « Désactiver la vérification (environnements éphémères uniquement) »
Host 192.168.122.*
StrictHostKeyChecking no
UserKnownHostsFile /dev/null

Fenêtre de terminal
ssh -v bob@192.168.1.10 # debug de base
ssh -vv bob@192.168.1.10 # détail du handshake
ssh -vvv bob@192.168.1.10 # tout (trop verbeux sauf cas extrême)

Les premières lignes à regarder :

debug1: Reading configuration data ~/.ssh/config
debug1: Connecting to 192.168.1.10 [192.168.1.10] port 22.
debug1: Connection established.
debug1: Authenticating to 192.168.1.10:22 as 'bob'
debug1: Trying private key: ~/.ssh/id_ed25519
debug1: Authentication succeeded (publickey).

Si Authentication succeeded n’apparaît pas → problème de clé ou d’authorized_keys côté serveur.

Les permissions incorrectes sur ~/.ssh/ font silencieusement échouer l’authentification par clé :

Fenêtre de terminal
chmod 700 ~/.ssh
chmod 600 ~/.ssh/id_ed25519
chmod 644 ~/.ssh/id_ed25519.pub
chmod 600 ~/.ssh/authorized_keys
chmod 644 ~/.ssh/known_hosts
chmod 600 ~/.ssh/config
Fenêtre de terminal
# Sur le serveur distant
sudo journalctl -u ssh -n 50
# ou sur RHEL/Fedora
sudo journalctl -u sshd -n 50
# Rechercher les refus
sudo grep "Failed\|refused\|Invalid" /var/log/auth.log
SymptômeCause probableAction
Connection refusedPort 22 fermé ou sshd arrêtésudo systemctl status ssh côté serveur
Permission denied (publickey)Mauvaise clé ou authorized_keys absent/corrompuVérifier avec -v, corriger les permissions
WARNING: REMOTE HOST IDENTIFICATION HAS CHANGEDVM reconstruite, IP réaffectéessh-keygen -R <ip>
Host key verification failedEmpreinte inconnue en mode strictVérifier avant d’accepter, ou ssh-keyscan
Timeout sans messageFirewall bloque le port 22nc -zv <host> 22 ou telnet <host> 22
Connexion coupée après inactivitéPas de keepaliveAjouter ServerAliveInterval 60 dans la config

  • ~/.ssh/config centralise les paramètres de connexion pour tous vos serveurs — c’est la façon professionnelle de gérer l’accès distant
  • ProxyJump remplace les anciennes configurations -A + bastion manuel — plus simple, plus sûr
  • ControlMaster est indispensable pour les outils comme Ansible ou rsync qui multiplient les connexions
  • ssh -v est la première commande à lancer quand une connexion échoue
  • Les permissions sur ~/.ssh/ ne sont pas optionnelles — SSH refuse silencieusement si elles sont incorrectes

Contrôle de connaissances

Validez vos connaissances avec ce quiz interactif

10 questions
5 min.
80% requis

Informations

  • Le chronomètre démarre au clic sur Démarrer
  • Questions à choix multiples, vrai/faux et réponses courtes
  • Vous pouvez naviguer entre les questions
  • Les résultats détaillés sont affichés à la fin

Lance le quiz et démarre le chronomètre

Ce site vous est utile ?

Sachez que moins de 1% des lecteurs soutiennent ce site.

Je maintiens +700 guides gratuits, sans pub ni tracing. Aujourd'hui, ce site ne couvre même pas mes frais d'hébergement, d'électricité, de matériel, de logiciels, mais surtout de cafés.

Un soutien régulier, même symbolique, m'aide à garder ces ressources gratuites et à continuer de produire des guides de qualité. Merci pour votre appui.

Abonnez-vous et suivez mon actualité DevSecOps sur LinkedIn