Guide pratique complet de SSH sur Ubuntu

Présentation

Cet article couvre les concepts fondamentaux et les cas d’utilisation clés de SSH (Secure Shell), outil indispensable pour l’administration de serveurs Linux et les opérations à distance. De l’installation du client à la connexion à distance de base, en passant par la génération sécurisée d’une paire de clés SSH, la configuration de l’authentification sans mot de passe, ainsi que les profils de configuration SSH (config) et les techniques de transfert de port (port forwarding), suivez ce guide étape par étape avec des commandes concrètes dans le terminal.

1. Vérification du client SSH et première connexion à distance

Installez et mettez à jour le paquet openssh-client afin de préparer les manipulations de connexion SSH à distance.

apt-get update -qq && apt-get install -y openssh-client

La commande ssh -V permet de vérifier la version du client OpenSSH installée sur le système.
⚙️ [Options principales]

-p : spécifie un numéro de port spécifique utilisé par le serveur distant au lieu du port 22 par défaut.
-i : indique le chemin d’accès au fichier de clé privée (Private Key) à utiliser pour l’authentification à la place d’un mot de passe.
-v : affiche des messages de débogage pour examiner en détail le processus de connexion et diagnostiquer les erreurs éventuelles.
-C : active la compression des données lors du transfert pour économiser de la bande passante réseau.
-o : permet de passer directement en ligne de commande une directive de configuration (ex. : ConnectTimeout) habituellement définie dans ~/.ssh/config.
-L : configure un transfert de port local (local port forwarding) pour rediriger le trafic vers un service réseau distant.
-R : configure un transfert de port distant (remote port forwarding) pour rendre un service local accessible depuis le serveur distant.

ssh -V

La commande ssh -p 22 -o ConnectTimeout=5 [email protected] tente une connexion vers l’hôte distant indiqué sur le port 22 avec un délai d’attente maximal (timeout) de 5 secondes.
Cela évite d’attendre indéfiniment en cas de latence ou d’échec de liaison, permettant de vérifier rapidement l’état de la connexion.

ssh -p 22 -o ConnectTimeout=5 testuser@127.0.0.1 || true

2. Génération d’une paire de clés SSH et configuration sécurisée des permissions

Préparez le répertoire destiné à stocker les clés SSH de manière sécurisée et restreignez les accès au seul propriétaire à l’aide de la commande mkdir -p ~/.ssh && chmod 700 ~/.ssh.

mkdir -p ~/.ssh && chmod 700 ~/.ssh

La commande ssh-keygen -t ed25519 -C 'lab-demo@ubuntu' -f ~/.ssh/id_ed25519 -N '' génère une nouvelle paire de clés SSH sans passphrase, reposant sur l’algorithme Ed25519, un standard cryptographique moderne.
Le résultat de la commande confirme la création correcte de la clé privée (id_ed25519), de la clé publique (id_ed25519.pub) et de l’empreinte unique de la clé (fingerprint).

ssh-keygen -t ed25519 -C ’lab-demo@ubuntu’ -f ~/.ssh/id_ed25519 -N ‘’

Pour satisfaire aux exigences de sécurité strictes du démon SSH, exécutez chmod 600 ~/.ssh/id_ed25519 && chmod 644 ~/.ssh/id_ed25519.pub : ainsi, la clé privée n’est accessible en lecture/écriture que par son propriétaire, tandis que la clé publique peut être lue par tous.

chmod 600 ~/.ssh/id_ed25519 && chmod 644 ~/.ssh/id_ed25519.pub

La commande ls -la ~/.ssh liste les fichiers créés dans le répertoire et affiche en détail les permissions de sécurité appliquées.
La sortie permet de valider que les permissions prévues sont bien en place : drwx------ (700) pour le répertoire .ssh, -rw------- (600) pour la clé privée et -rw-r--r-- (644) pour la clé publique.

ls -la ~/.ssh

3. Enregistrement de la clé publique pour la connexion sans mot de passe (ssh-copy-id)

Créez le fichier destiné à contenir les clés publiques autorisées pour la connexion distante, et appliquez des droits d’accès limités au propriétaire en lecture/écriture avec touch ~/.ssh/authorized_keys && chmod 600 ~/.ssh/authorized_keys.

touch ~/.ssh/authorized_keys && chmod 600 ~/.ssh/authorized_keys

Ajoutez le contenu de la clé publique générée à la liste des clés autorisées en exécutant la commande cat ~/.ssh/id_ed25519.pub >> ~/.ssh/authorized_keys.

cat ~/.ssh/id_ed25519.pub » ~/.ssh/authorized_keys

La commande ssh-keygen -l -f ~/.ssh/authorized_keys consulte l’empreinte du fichier de clés autorisées afin de vérifier que la clé publique a été correctement enregistrée.
Le résultat confirme que la clé publique Ed25519 de 256 bits ainsi que le commentaire spécifié lors de la création (lab-demo@ubuntu) sont bien présents.

ssh-keygen -l -f ~/.ssh/authorized_keys

4. Simplification des connexions complexes avec le fichier SSH Config

Définissez l’adresse IP, le nom d’utilisateur, le numéro de port et le chemin de la clé d’authentification de l’hôte distant dans le fichier ~/.ssh/config afin de vous connecter rapidement via un simple alias au lieu d’une longue commande.

cat « ‘EOF’ > ~/.ssh/config
Host dev-server
HostName 127.0.0.1
User testuser
Port 22
IdentityFile ~/.ssh/id_ed25519
EOF

Afin d’éviter que le client SSH ne refuse le fichier de configuration pour des raisons de sécurité, ajustez ses permissions en lecture/écriture pour le seul propriétaire avec la commande chmod 600 ~/.ssh/config.

chmod 600 ~/.ssh/config

La commande cat ~/.ssh/config affiche le contenu du fichier de configuration du client SSH pour vérifier son état.
Le résultat confirme que le nom d’hôte, le compte utilisateur, le port et la clé privée associés à l’alias dev-server ont été enregistrés exactement comme prévu.

cat ~/.ssh/config

5. Exécution de commandes uniques et tunnels SSH pour booster la productivité

La commande ssh -V permet de vérifier la version du client OpenSSH installée sur le système actuel.

ssh -V

La commande ssh -o BatchMode=yes -o ConnectTimeout=2 [email protected] 'uname -a; df -h' || true exécute directement sur l’hôte distant des commandes d’inspection système et d’utilisation de l’espace disque sans ouvrir de shell interactif, puis renvoie le résultat.
En désactivant toute invite de mot de passe, elle permet d’exécuter des commandes uniques en toute sécurité dans des scripts d’automatisation ou des tâches planifiées.

ssh -o BatchMode=yes -o ConnectTimeout=2 testuser@127.0.0.1 ‘uname -a; df -h’ || true

La commande ssh -f -N -L 8080:localhost:80 -o ConnectTimeout=2 [email protected] || true met en place un transfert de port local en ouvrant un tunnel chiffré sécurisé en arrière-plan sans exécuter de commande distante, reliant le port 8080 de la machine locale au port 80 du serveur distant.
Cette méthode permet d’accéder en toute sécurité, via un port local, à des services web internes ou à des bases de données distantes non exposées directement sur Internet.

ssh -f -N -L 8080:localhost:80 -o ConnectTimeout=2 testuser@127.0.0.1 || true

Vous avez découvert pas à pas l’essentiel de SSH sur Ubuntu : de la connexion à distance initiale à la configuration d’une authentification par clé sans mot de passe et aux fonctionnalités avancées de transfert de port.
Grâce à ces compétences pratiques, vous disposez désormais des bases pour concevoir et administrer un environnement de serveurs distants à la fois fiable, ergonomique et sécurisé.