Commandes SSH Essentielles pour les Administrateurs Système
Introduction
Secure Shell (SSH) est la pierre angulaire de l'administration à distance sécurisée pour les serveurs et les périphériques réseau. Pour les administrateurs système, maîtriser SSH n'est pas seulement une compétence, c'est une nécessité fondamentale pour gérer l'infrastructure de manière efficace et sécurisée. SSH fournit un canal sécurisé sur un réseau non sécurisé en utilisant un chiffrement fort, garantissant que toutes les communications, y compris les mots de passe, les commandes et les transferts de fichiers, restent confidentielles et protégées contre l'écoute clandestine.
Cet article se veut un guide complet des commandes et concepts SSH les plus essentiels que tout administrateur système devrait connaître. Nous aborderons tout, des méthodes de connexion de base et des transferts de fichiers sécurisés aux techniques avancées comme le transfert de port et les connexions persistantes. En comprenant et en mettant en œuvre ces commandes et bonnes pratiques, vous pouvez améliorer considérablement vos capacités de gestion de serveur à distance, simplifier les flux de travail et maintenir une posture de sécurité robuste dans vos environnements.
Établir des Connexions SSH de Base
L'utilisation la plus fondamentale de SSH est d'établir une session shell interactive et sécurisée avec un serveur distant. La syntaxe de base est simple, vous permettant de spécifier l'utilisateur et l'hôte cible.
Connexion à un Serveur Distant
Pour vous connecter à un serveur distant en utilisant votre nom d'utilisateur local actuel :
ssh hostname_or_IP_address
Si votre nom d'utilisateur sur le serveur distant est différent de votre nom d'utilisateur local, vous devez le spécifier :
ssh username@hostname_or_IP_address
Exemple :
ssh [email protected]
ssh [email protected]
Spécifier un Port Personnalisé
Par défaut, SSH utilise le port 22. Cependant, pour des raisons de sécurité ou des configurations réseau spécifiques, les serveurs écoutent souvent sur un port différent. Vous pouvez spécifier un port personnalisé à l'aide de l'option -p :
ssh -p 2222 username@hostname_or_IP_address
Astuce : Changer le port SSH par défaut (port 22) est une pratique de sécurité courante pour réduire les tentatives d'attaque automatisées, bien que cela ne remplace pas une authentification forte.
Authentification SSH par Clé
Bien que l'authentification par mot de passe soit courante, l'authentification par clé est la méthode recommandée et la plus sécurisée pour SSH. Elle utilise une paire de clés cryptographiques : une clé privée (gardée secrète sur votre machine locale) et une clé publique (placée sur le serveur distant).
Génération de Paires de Clés SSH
Utilisez ssh-keygen pour générer une nouvelle paire de clés. Il est recommandé d'utiliser une phrase secrète forte pour votre clé privée.
ssh-keygen -t rsa -b 4096
Cette commande génère une paire de clés RSA d'une longueur de 4096 bits. La clé privée (id_rsa) et la clé publique (id_rsa.pub) seront généralement stockées dans ~/.ssh/.
Copier Votre Clé Publique vers un Serveur Distant
Pour activer l'authentification par clé, votre clé publique doit être placée dans le fichier ~/.ssh/authorized_keys sur le serveur distant. L'utilitaire ssh-copy-id automatise ce processus :
ssh-copy-id username@hostname_or_IP_address
Cette commande vous demandera le mot de passe de l'utilisateur distant une seule fois, puis copiera votre clé publique et définira les permissions correctes. Après cela, vous devriez pouvoir vous connecter sans mot de passe (bien que vous soyez invité à saisir la phrase secrète de votre clé privée si vous en avez défini une).
Avertissement : Ne partagez jamais votre clé privée avec qui que ce soit. Elle doit avoir des permissions de fichier strictes (chmod 600 ~/.ssh/id_rsa).
Gestion des Connexions et Configurations SSH
Exécution d'une Seule Commande à Distance
SSH n'est pas seulement destiné aux shells interactifs. Vous pouvez exécuter une seule commande sur un serveur distant directement et renvoyer sa sortie à votre terminal local.
ssh username@hostname_or_IP_address 'command_to_execute'
Exemple :
ssh [email protected] 'ls -l /var/log/'
ssh [email protected] 'sudo apt update && sudo apt upgrade -y'
Utilisation du Fichier de Configuration SSH (~/.ssh/config)
Pour les connexions fréquentes, la définition d'hôtes dans ~/.ssh/config peut faire gagner du temps et simplifier les commandes. Ce fichier vous permet de définir des alias, de spécifier des utilisateurs, des ports, des clés privées et d'autres options de connexion.
Exemple d'entrée dans ~/.ssh/config :
Host webserver
Hostname 192.168.1.100
User admin
Port 2222
IdentityFile ~/.ssh/id_rsa_web
ForwardAgent yes
Host devbox
Hostname dev.mydomain.com
User developer
Port 22
IdentityFile ~/.ssh/id_rsa_dev
Une fois configuré, vous pouvez vous connecter simplement en utilisant l'alias :
ssh webserver
ssh devbox
Bonne Pratique : Utilisez toujours le fichier ~/.ssh/config pour gérer les connexions SSH complexes. Cela améliore la lisibilité, réduit les erreurs de frappe et centralise vos configurations.
Transfert de Fichiers Sécurisé avec SSH
SSH fournit deux outils principaux pour les transferts de fichiers sécurisés : scp et sftp.
scp (Secure Copy Protocol)
scp est utilisé pour copier des fichiers et des répertoires entre des hôtes locaux et distants. Il utilise les mêmes mécanismes d'authentification et de sécurité que SSH.
Copier un Fichier du Local vers le Distant
scp /path/to/local/file username@hostname_or_IP_address:/path/to/remote/directory/
Exemple :
scp my_app.tar.gz admin@webserver:/var/www/html/
Copier un Fichier du Distant vers le Local
scp username@hostname_or_IP_address:/path/to/remote/file /path/to/local/directory/
Exemple :
scp admin@webserver:/var/log/nginx/access.log ~/logs/
Copier un Répertoire de Manière Récursive
Utilisez l'option -r pour les répertoires :
rscp -r /path/to/local/dir username@hostname_or_IP_address:/path/to/remote/parent_dir/
Préserver les Attributs de Fichier
Pour préserver les dates de modification, d'accès et les modes, utilisez l'option -p :
scp -p localfile user@remotehost:/remotepath/
sftp (SSH File Transfer Protocol)
sftp fournit un programme interactif de transfert de fichiers, similaire à FTP mais sécurisé par SSH. Il est idéal pour gérer plusieurs fichiers ou effectuer des opérations complexes sur les répertoires.
Connexion à un Serveur SFTP
sftp username@hostname_or_IP_address
Une fois connecté, vous obtiendrez une invite sftp>. Les commandes courantes incluent :
ls: Lister le contenu du répertoire distantlls: Lister le contenu du répertoire localcd remote_directory: Changer de répertoire distantlcd local_directory: Changer de répertoire localget remote_file: Télécharger un fichierput local_file: Téléverser un fichiermget remote_files: Télécharger plusieurs fichiers (les jokers sont pris en charge)mput local_files: Téléverser plusieurs fichiers (les jokers sont pris en charge)exitoubye: Quitter la session SFTP
Exemple de Session SFTP :
sftp [email protected]
Connected to 192.168.1.100.
sftp> ls
config.ini data/ logs/ public_html/
sftp> cd public_html
sftp> get index.html
Fetching /public_html/index.html to index.html
sftp> put new_page.html
Uploading new_page.html to /public_html/new_page.html
sftp> bye
Tunneling SSH et Transfert de Port
Le tunneling SSH, ou transfert de port, vous permet de créer des connexions sécurisées entre des ports locaux et distants, permettant l'accès à des services qui pourraient autrement être bloqués par des pare-feu ou directement inaccessibles.
Transfert de Port Local (-L)
Le transfert de port local vous permet d'accéder à un service sur un réseau distant (ou sur le serveur distant lui-même) depuis votre machine locale comme s'il s'exécutait localement.
ssh -L [local_port]:[remote_host]:[remote_port] username@ssh_server
Exemple : Accédez à un serveur de base de données (port 3306) sur un réseau privé, via un hôte de saut ssh_server, depuis le port 9000 de votre machine locale.
ssh -L 9000:db.private.net:3306 [email protected]
Désormais, vous pouvez vous connecter à localhost:9000 sur votre machine locale, et la connexion sera sécurisée et transmise à db.private.net:3306 via jumphost.com.
Transfert de Port Distant (-R)
Le transfert de port distant rend un service de votre machine locale (ou réseau local) accessible depuis le serveur distant, et potentiellement aux clients sur le réseau du serveur distant.
ssh -R [remote_port]:[local_host]:[local_port] username@ssh_server
Exemple : Rendez un serveur web local (port 8000) accessible depuis ssh_server sur le port 8080.
ssh -R 8080:localhost:8000 admin@remote_server.com
Désormais, toute personne sur remote_server.com peut accéder à votre serveur web local en se connectant à localhost:8080 sur remote_server.com.
Transfert de Port Dynamique (-D)
Le transfert de port dynamique crée un proxy SOCKS, vous permettant de router tout votre trafic (ou le trafic spécifique à une application) via le tunnel SSH. C'est utile pour contourner les pare-feu ou sécuriser la navigation.
ssh -D [local_port] username@ssh_server
Exemple : Créez un proxy SOCKS sur le port 1080 de votre machine locale via ssh_server.
ssh -D 1080 [email protected]
Configurez votre navigateur ou application pour utiliser localhost:1080 comme proxy SOCKS5, et tout son trafic réseau sera acheminé via jumphost.com.
Utilisation Avancée de SSH et Astuces
Exécuter des Commandes en Arrière-plan
Pour les commandes non interactives qui doivent s'exécuter et se détacher, vous pouvez utiliser l'option -f (passe en arrière-plan avant l'exécution de la commande) et -N (n'exécute pas de commande distante).
ssh -f -N -L 9000:db.private.net:3306 [email protected]
Ceci configure un transfert de port local en arrière-plan.
Agent SSH et ssh-add
Le ssh-agent est un programme qui conserve vos clés privées en mémoire, vous n'avez donc qu'à saisir votre phrase secrète une seule fois par session. ssh-add ajoute des clés à l'agent.
# Démarrer l'agent (s'il n'est pas déjà en cours d'exécution)
eval "$(ssh-agent -s)"
# Ajouter votre ou vos clés à l'agent
ssh-add ~/.ssh/id_rsa
ssh-add ~/.ssh/id_rsa_web # Pour une clé spécifique
ssh-agent est crucial lors de l'utilisation de ForwardAgent yes dans votre ~/.ssh/config, vous permettant d'utiliser vos clés locales pour vous authentifier du serveur de rebond vers les serveurs suivants sans placer votre clé privée sur le serveur de rebond.
Connexions SSH Persistantes (ControlMaster)
Pour des connexions plus rapides et une surcharge réduite, ControlMaster dans votre ~/.ssh/config permet à plusieurs sessions SSH de partager une seule connexion réseau.
Host *
ControlMaster auto
ControlPath ~/.ssh/control/%r@%h:%p
ControlPersist 4h
Cette configuration crée un socket de contrôle pour la première connexion (ControlMaster auto) et les connexions ultérieures au même hôte réutiliseront ce socket pendant un maximum de 4 heures (ControlPersist 4h).
Dépannage des Problèmes SSH
- Permission Refusée : Vérifiez les permissions des fichiers pour les clés privées (
chmod 600 ~/.ssh/id_rsa), les clés publiques (chmod 644 ~/.ssh/id_rsa.pub), et le répertoire.ssh(chmod 700 ~/.ssh). Sur le serveur, assurez-vous que~/.ssh/authorized_keysachmod 600et~/.sshachmod 700. - Connexion Expirée : Le serveur peut être hors service, un pare-feu bloque le port 22 (ou un port personnalisé), ou l'adresse IP est incorrecte.
- Sortie Verbose : Utilisez les options
-v,-vv, ou-vvvavecsshpour des informations de débogage détaillées.
bash ssh -vvv [email protected]
Conclusion
SSH est un outil indispensable pour les administrateurs système, offrant un accès à distance, une exécution de commandes et des capacités de transfert de fichiers sécurisés et efficaces. En maîtrisant les commandes et techniques abordées dans cet article – des connexions de base et l'authentification par clé au tunneling avancé et à la gestion de la configuration – vous pouvez améliorer considérablement votre productivité et maintenir la sécurité de votre infrastructure serveur.
Passez régulièrement en revue vos configurations SSH, utilisez l'authentification par clé et tirez parti des fonctionnalités puissantes comme ~/.ssh/config et ssh-agent pour simplifier vos tâches quotidiennes. Avec ces commandes SSH essentielles à portée de main, vous êtes bien équipé pour gérer les systèmes distants avec confiance et précision. Continuez à pratiquer et à explorer ses nombreuses fonctionnalités pour débloquer une efficacité encore plus grande dans vos fonctions administratives.