Dans le précédent article, nous avons vu les bases de la commande `ssh` et quelques options très utiles. Mais retaper à chaque fois une adresse IP compliquée, un nom d’utilisateur, un numéro de port, etc., c’est franchement pénible. Dans ce genre de situation, le **fichier de configuration SSH (SSH Config)** règle le problème d’un coup. Comme un système de favoris, il vous permet d’enregistrer les informations de connexion pour les serveurs que vous utilisez souvent, puis de vous connecter facilement via un **alias**. Et je parle en connaissance de cause. Quand j’étais un « **débutant complet** » et que je ne savais même pas que ce fichier existait, je me disais souvent : *« Mais comment je suis censé retaper cette commande SSH longue et compliquée à chaque fois ? »* Alors j’avais pris un raccourci… pas très glorieux : je copiais la ligne de commande telle quelle et je l’enregistrais comme alias dans `.bashrc`. Plus tard, quand j’ai enfin appris à utiliser correctement le fichier `config`, j’ai réalisé à quel point j’avais fait ça de manière **brute, maladroite et franchement “pas futée”**. ![Moi, en train d’admirer la découverte du SSH config](/media/whitedec/blog_img/ssh_config_favorite_style.webp) --- ## Qu’est-ce qu’un fichier SSH Config ? {#sec-481141e7802b} Le **fichier SSH Config** est un fichier de configuration qui permet de personnaliser le comportement du client SSH. Si vous y enregistrez à l’avance les informations de connexion d’un hôte (nom d’utilisateur, port, clé privée à utiliser, etc.), vous pourrez ensuite vous connecter en tapant simplement un alias court. * **Emplacement :** en général, il se trouve dans le dossier `.ssh` de votre répertoire personnel et s’appelle `config`. Si vous venez d’installer SSH, il est très possible qu’il n’existe pas encore. Dans ce cas, il faut le créer. * **Création du fichier :** si `~/.ssh/config` n’existe pas, créez-le vous-même. **Et surtout, mettez impérativement les permissions à 600.** ```bash touch ~/.ssh/config chmod 600 ~/.ssh/config # Indispensable pour la sécurité ! ``` --- ## Règles d’écriture du fichier config {#sec-a6ba2fff88f5} Le fichier config est un simple fichier texte. Chaque configuration d’hôte est écrite sous forme de bloc commençant par le mot-clé `Host`. #### Structure de base ```bash Host [alias] [option1] [valeur1] [option2] [valeur2] ... ``` * **`Host [alias]`** : indique le début du bloc et définit l’**alias** que vous utiliserez dans la commande `ssh`. À la place d’un alias, vous pouvez aussi mettre directement l’adresse de l’hôte (IP ou domaine). Les jokers (`*`, `?`) sont également possibles. * **Indentation :** les options sous `Host` doivent être **indentées**. Espaces ou tabulations, peu importe — l’essentiel est de rester cohérent. * **Options :** sous `Host`, vous listez différentes options SSH qui s’appliqueront quand vous vous connecterez via cet alias. Ce sont les mêmes options que celles utilisées en ligne de commande avec `ssh -option`. ### Options courantes {#sec-488803d47bdf} | | | | | ----------------------- | --------------------------------------------------------- | -------------------------------- | | **Option** | **Description** | **Exemple** | | `HostName` | Adresse IP ou nom de domaine réel du serveur | `192.168.1.100` ou `example.com` | | `User` | Nom d’utilisateur distant | `ubuntu`, `ec2-user`, `root` | | `Port` | Port SSH du serveur (22 par défaut) | `2222` | | `IdentityFile` | Chemin vers la clé privée à utiliser | `~/.ssh/id_ed25519_myserver` | | `ForwardAgent` | Activer l’agent forwarding (avec `ssh-agent`) | `yes` | | `StrictHostKeyChecking` | Vérification stricte de la clé d’hôte (`yes` recommandé) | `no` (temporaire au début) | | `PortForwarding` | Autoriser le port forwarding | `yes` | | `LocalForward` | Port forwarding local (équivalent de `-L`) | `8080 localhost:80` | | `ServerAliveInterval` | Intervalle (s) pour vérifier que la connexion est vivante | `60` (évite les coupures) | | `ServerAliveCountMax` | Nombre d’échecs avant coupure | `3` | --- ## Exemple de fichier SSH Config {#sec-92c9daf3ee29} Ajoutons quelques serveurs fréquemment utilisés dans `~/.ssh/config`. ```ini # Premier serveur : serveur web (alias : webserver) Host webserver HostName 192.168.1.100 User ubuntu Port 2222 IdentityFile ~/.ssh/id_ed25519_webserver # Clé dédiée au serveur web # Deuxième serveur : serveur de dev (alias : devbox) Host devbox HostName dev.example.com User developer IdentityFile ~/.ssh/id_rsa_dev # Clé RSA # À la connexion, on redirige le port local 8000 vers le port 80 distant LocalForward 8000 localhost:80 # Troisième exemple : tous les serveurs AWS EC2 (pattern : aws-*) Host aws-* User ec2-user IdentityFile ~/.ssh/aws_ec2_key.pem # Envoie des keep-alives pour éviter la déconnexion ServerAliveInterval 60 ServerAliveCountMax 3 # Configuration générale pour une plage d’IP (pattern : 10.0.0.*) Host 10.0.0.* User admin Port 22 ``` **Explications :** * `webserver` : connexion à `192.168.1.100` en tant que `ubuntu`, via le port `2222`, avec la clé `id_ed25519_webserver`. * `devbox` : connexion à `dev.example.com` en tant que `developer`, avec la clé `id_rsa_dev`, et redirection du port local 8000 vers le port 80 distant. * `aws-*` : configuration appliquée à tous les alias commençant par `aws-` (ex. `aws-prod`, `aws-dev`). Les options `User` et `IdentityFile` s’appliquent automatiquement. `HostName`, lui, sera interprété comme `prod` si vous vous connectez avec `aws-prod` (et sera utilisé ensuite via `ssh aws-prod`). * `10.0.0.*` : pour les IP au format `10.0.0.x`, l’utilisateur `admin` et le port 22 s’appliquent automatiquement. > Pour être honnête, j’ai présenté la méthode wildcard `*` surtout pour la culture générale, mais dans la vraie vie je l’utilise très rarement. > C’est souvent plus simple à maintenir quand on fait un mapping **1 serveur = 1 bloc de config (1:1)**.
> Et comme il m’arrive d’accéder au **même serveur avec des réglages différents**, j’ajoute un alias à chaque fois — puis je choisis l’alias comme on choisit un plat sur une carte — et je n’ai plus qu’à “commander” avec `ssh my-alias`. --- ![Une image magique : on appuie sur un bouton de connexion SSH et le réseau se déploie](/media/whitedec/blog_img/ssh_config_network_magic.webp) ## Comment utiliser le fichier config {#sec-e176d1ccdfce} Une fois vos réglages enregistrés, la connexion devient beaucoup plus simple. Essayons avec les exemples ci-dessus. ### 1. Se connecter avec un alias {#sec-b0810f8f4908} Il suffit d’exécuter `ssh` avec l’alias. * **Avec l’alias `webserver` :** ```bash ssh webserver Enter passphrase for key '/home/youruser/.ssh/id_ed25519_webserver': ubuntu@webserver-ip:~ $ ``` > En interne, c’est équivalent à : > `ssh -p 2222 -i ~/.ssh/id_ed25519_webserver ubuntu@192.168.1.100` * **Avec l’alias `devbox` :** ```bash ssh devbox Enter passphrase for key '/home/youruser/.ssh/id_rsa_dev': developer@devbox-domain:~ $ ``` > (En même temps, le port local 8000 est redirigé vers le port 80 de `dev.example.com`.) --- ## Avantages du fichier config {#sec-2c234f7e8725} * **Praticité :** remplacez des commandes longues et complexes par des alias courts — moins de fautes de frappe, moins de perte de temps. * **Productivité :** passer d’un serveur à l’autre devient rapide et fluide. * **Maintenance plus simple :** tout est centralisé dans un seul fichier. Par exemple, si l’IP d’un serveur change, vous modifiez uniquement le config. * **Sécurité :** vous évitez de laisser des informations sensibles (ex. chemin de clé privée) dans l’historique de commandes. --- ## Pour conclure {#sec-9c659c3d712e} Le fichier SSH Config est un outil indispensable pour tous ceux qui utilisent SSH — développeurs comme administrateurs système. Avec lui, votre expérience de connexion devient plus simple, plus rapide et plus propre. Ouvrez `~/.ssh/config` et créez vos propres alias ! N’hésitez pas à lire mes autres articles liés à SSH : utilisez la barre de recherche à droite et tapez `ssh` pour trouver d’autres contenus. Et si vous avez des questions, laissez un commentaire — je répondrai avec plaisir ! ---