Maîtriser SSH : votre guide essentiel de la ligne de commande
Le protocole Secure Shell (SSH) est la pierre angulaire de l'administration distante sécurisée dans les environnements Linux, macOS et de type Unix. Il fournit un canal chiffré pour les services réseau, permettant aux utilisateurs de se connecter en toute sécurité à des systèmes distants, d'exécuter des commandes et de transférer des fichiers sans exposer de données sensibles.
Bien que SSH soit omniprésent, la maîtrise de ses commandes de base et de ses options de configuration peut améliorer considérablement l'efficacité, la sécurité et la fiabilité de votre flux de travail de gestion de serveurs distants. Ce guide est une ressource complète, couvrant les commandes fondamentales nécessaires pour une connexion sécurisée, une gestion efficace des fichiers et des techniques de réseau puissantes comme le transfert de port (port forwarding).
1. Établir une connexion distante sécurisée
L'utilisation la plus fréquente de SSH est la sécurisation d'une connexion terminal à un serveur distant. La syntaxe de base est simple, mais il existe des options cruciales pour une sécurité et une convivialité accrues.
Syntaxe de connexion de base
La commande standard exige de spécifier l'utilisateur distant et l'adresse de l'hôte (IP ou nom de domaine) :
ssh [user]@[host]
# Exemple:
ssh [email protected]
Spécifier un port non standard
Pour des raisons de sécurité, de nombreux administrateurs modifient le port SSH par défaut (Port 22). Utilisez l'indicateur (flag) -p pour spécifier un numéro de port différent :
ssh -p 2222 [email protected]
Exécuter des commandes distantes uniques
SSH ne se limite pas à l'ouverture d'un shell interactif. Vous pouvez exécuter une seule commande sur le serveur distant et faire renvoyer le résultat localement, ce qui est extrêmement utile pour les scripts et les vérifications rapides.
# Exécuter 'ls -l' dans le répertoire /var/log du serveur distant
ssh user@host 'ls -l /var/log'
# Vérifier la disponibilité (uptime) du serveur
ssh user@host uptime
2. Gérer l'authentification avec des clés SSH
L'authentification par mot de passe est vulnérable aux attaques par force brute. Les clés SSH — une paire cryptographique composée d'une clé privée (gardée secrète sur votre machine) et d'une clé publique (placée sur le serveur distant) — offrent une méthode d'authentification beaucoup plus sécurisée.
Générer des paires de clés
Si vous n'avez pas encore de paire de clés, vous pouvez en générer une en utilisant ssh-keygen. La meilleure pratique consiste à utiliser une phrase de passe forte pour protéger votre clé privée.
ssh-keygen -t rsa -b 4096
Copier la clé publique sur le serveur
L'utilitaire ssh-copy-id est le moyen le plus simple d'installer votre clé publique locale (~/.ssh/id_rsa.pub) dans le fichier ~/.ssh/authorized_keys de l'utilisateur distant, permettant une connexion sans mot de passe.
# Copie la clé publique par défaut sur le serveur et définit les autorisations correctes
ssh-copy-id user@host
Conseil : Utilisation de la clé privée
Si votre clé privée n'est pas à l'emplacement par défaut (~/.ssh/id_rsa), vous devez utiliser l'indicateur-ipour spécifier son chemin lors de la connexion :
bash ssh -i ~/.ssh/my_custom_key user@host
3. Transferts de fichiers sécurisés
SSH fournit deux outils principaux pour le transfert sécurisé de fichiers : scp (Secure Copy) et sftp (Secure File Transfer Protocol).
A. Utilisation de Secure Copy (scp)
scp est idéal pour les transferts de fichiers simples, rapides et ponctuels, offrant une interface en ligne de commande calquée sur la commande Unix standard cp (copy).
Transfert de fichiers du local vers le distant
# Syntaxe : scp [fichier_local] [utilisateur]@[hôte]:/[chemin_distant]
scp deployment.tar.gz user@webserver:/var/www/uploads/
Transfert de fichiers du distant vers le local
# Syntaxe : scp [utilisateur]@[hôte]:/[fichier_distant] [chemin_local]
scp user@dbserver:/var/log/backup.sql .
Copie de répertoires de manière récursive
Utilisez l'indicateur -r pour copier des structures de répertoires entières.
scp -r ~/project_files/ user@buildserver:/home/user/builds/
B. Utilisation du Protocole de Transfert de Fichiers Sécurisé (sftp)
sftp établit une session interactive, similaire à un client FTP traditionnel, mais sécurisée via SSH. Il est mieux adapté pour naviguer dans des répertoires distants, lister des fichiers et effectuer plusieurs transferts au cours d'une seule session.
Démarrage d'une session sftp
sftp user@host
Commandes de session sftp courantes
| Commande | Description |
|---|---|
ls |
Lister les fichiers distants |
lls |
Lister les fichiers locaux |
get filename |
Télécharger un fichier depuis le serveur distant |
put filename |
Téléverser un fichier vers le serveur distant |
cd /path/ |
Changer le répertoire distant |
lcd /path/ |
Changer le répertoire local |
quit |
Quitter la session sftp |
4. Technique avancée : Tunneling SSH (Transfert de Port)
Le tunneling SSH, ou transfert de port, vous permet de chiffrer les connexions pour des protocoles non sécurisés ou d'accéder à des services sur un réseau interne via un hôte de saut (jump host). La forme la plus courante est le Transfert de Port Local.
Transfert de Port Local (-L)
Le transfert local achemine le trafic d'un port sur votre machine locale vers un port spécifié sur un hôte distant via le serveur SSH. Ceci est utile pour accéder à des bases de données internes, des interfaces web ou des services propriétaires qui ne sont pas directement exposés à l'internet public.
Scénario : Vous souhaitez accéder à un serveur web interne privé (accessible uniquement depuis jumpbox) sur le port 80.
# Syntaxe : ssh -L [port_local]:[hôte_destination]:[port_destination] [utilisateur]@[jumpbox]
ssh -L 8080:internal-web.lan:80 user@jumpbox -N
-L 8080:internal-web.lan:80: Le trafic arrivant sur votre machine locale sur le port 8080 est transféré versinternal-web.lansur le port 80, viajumpbox.-N: Indique à SSH de ne pas exécuter de commande distante ; il établit simplement le tunnel.
Une fois la connexion établie, vous pouvez accéder au site interne en naviguant vers http://localhost:8080 dans votre navigateur local.
5. Améliorer l'efficacité avec le fichier de configuration SSH
Taper manuellement des commandes SSH complexes, y compris les ports personnalisés, les noms d'utilisateur et les chemins de clés, est inefficace. Le fichier de configuration SSH (~/.ssh/config) vous permet de définir des alias et des paramètres pour les serveurs fréquemment consultés.
Exemple de configuration (~/.ssh/config)
Créez ou modifiez le fichier ~/.ssh/config avec la structure suivante :
# Serveur 1 : Clé standard, port non standard
Host dev-web
HostName 10.0.0.50
User deployment_user
Port 2222
IdentityFile ~/.ssh/id_rsa_dev
# Serveur 2 : Accès via Jumpbox nécessitant une authentification par clé
Host production-db
HostName 203.0.113.10
User sysadmin
IdentityFile ~/.ssh/prod_key
LocalForward 54320 127.0.0.1:5432
Connexion avec des alias
Une fois configuré, la connexion devient beaucoup plus simple :
# Se connecte à 10.0.0.50 sur le port 2222 en tant que deployment_user
ssh dev-web
# Se connecte et configure automatiquement le transfert de port (si configuré)
ssh production-db
Conclusion
SSH est un outil puissant et flexible, essentiel pour l'administration moderne des systèmes. En allant au-delà de la commande de base ssh user@host, en adoptant l'authentification par clé, en tirant parti des utilitaires de transfert de fichiers sécurisés comme scp et sftp, et en maîtrisant les fichiers de configuration, vous débloquez un environnement d'accès distant très efficace et sécurisé. La pratique continue de ces commandes fondamentales vous assure de pouvoir gérer et interagir avec votre infrastructure distante de manière efficace et sécurisée.