Commandes SSH essentielles pour les administrateurs système

Maîtrisez les commandes SSH essentielles pour les administrateurs système grâce à ce guide complet. Apprenez à vous connecter de manière sécurisée aux serveurs distants, à gérer les configurations et à effectuer des transferts de fichiers efficaces à l'aide de `scp` et `sftp`. Plongez dans des sujets avancés comme la redirection de ports locale, distante et dynamique (tunneling SSH) pour sécuriser et rationaliser l'accès au réseau. Des exemples pratiques, des conseils sur l'authentification par clé, l'`ssh-agent` et des étapes de dépannage vous permettront de gérer votre infrastructure en toute confiance et d'améliorer votre efficacité d'administration à distance.

44 vues

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 distant
  • lls : Lister le contenu du répertoire local
  • cd remote_directory : Changer de répertoire distant
  • lcd local_directory : Changer de répertoire local
  • get remote_file : Télécharger un fichier
  • put local_file : Téléverser un fichier
  • mget 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)
  • exit ou bye : 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_keys a chmod 600 et ~/.ssh a chmod 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 -vvv avec ssh pour 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.