Commandes SSH essentielles pour les administrateurs système

Apprenez les commandes SSH essentielles pour la connexion à distance, les clés, les fichiers de configuration, le transfert de fichiers, le tunneling, les agents et le dépannage.

Commandes SSH essentielles pour les administrateurs système

Secure Shell (SSH) est l'outil d'accès à distance quotidien pour les serveurs et les périphériques réseau. Si vous gérez des systèmes Linux, vous utilisez les commandes SSH pour vous connecter, copier des fichiers, exécuter des commandes ponctuelles, ouvrir des tunnels et déboguer les échecs de connexion.

Ce guide se concentre sur les commandes et les options dont vous aurez le plus besoin lors de tâches d'administration réelles.

É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 nom_hôte_ou_adresse_IP

Si votre nom d'utilisateur sur le serveur distant est différent de votre nom d'utilisateur local, vous devez le spécifier :

ssh nom_utilisateur@nom_hôte_ou_adresse_IP

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 de configuration réseau spécifique, les serveurs écoutent souvent sur un port différent. Vous pouvez spécifier un port personnalisé à l'aide du drapeau -p :

ssh -p 2222 nom_utilisateur@nom_hôte_ou_adresse_IP

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 par clé SSH

Bien que l'authentification par mot de passe soit courante, l'authentification par clé est la méthode recommandée et 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. Pour la plupart des configurations OpenSSH modernes, les clés Ed25519 sont un bon choix par défaut. Utilisez RSA uniquement lorsque vous avez besoin de compatibilité avec des systèmes plus anciens ou des politiques qui l'exigent.

ssh-keygen -t ed25519 -a 100

Cette commande génère une paire de clés Ed25519 et augmente le nombre de tours de dérivation de clé utilisés pour protéger la phrase de passe de la clé privée. La clé privée (id_ed25519) et la clé publique (id_ed25519.pub) sont généralement stockées dans ~/.ssh/.

Copie de votre clé publique sur 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 nom_utilisateur@nom_hôte_ou_adresse_IP

Cette commande vous demandera le mot de passe de l'utilisateur distant une 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 de passe 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, comme chmod 600 ~/.ssh/id_ed25519.

Gestion des connexions et configurations SSH

Exécution d'une commande unique à distance

SSH n'est pas seulement pour les shells interactifs. Vous pouvez exécuter une seule commande sur un serveur distant directement et renvoyer sa sortie vers votre terminal local.

ssh nom_utilisateur@nom_hôte_ou_adresse_IP 'commande_à_exécuter'

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, définir des 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 ~/.ssh/config :

Host serveurweb
    Hostname 192.168.1.100
    User admin
    Port 2222
    IdentityFile ~/.ssh/id_rsa_web
    IdentitiesOnly yes

Host boitedev
    Hostname dev.mondomaine.com
    User developer
    Port 22
    IdentityFile ~/.ssh/id_rsa_dev

Une fois configuré, vous pouvez vous connecter simplement en utilisant l'alias :

ssh serveurweb
ssh boitedev

Meilleure pratique : Utilisez le fichier ~/.ssh/config pour les connexions répétées. Il améliore la lisibilité, réduit les erreurs de frappe et conserve les options de connexion en un seul endroit. Évitez d'activer le forwarding d'agent globalement ; activez-le uniquement pour les hôtes qui en ont vraiment besoin.

Transfert sécurisé de fichiers 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.

Copie d'un fichier du local vers le distant

scp /chemin/vers/fichier/local nom_utilisateur@nom_hôte_ou_adresse_IP:/chemin/vers/repertoire/distant/

Exemple :

scp mon_app.tar.gz admin@serveurweb:/var/www/html/

Copie d'un fichier du distant vers le local

scp nom_utilisateur@nom_hôte_ou_adresse_IP:/chemin/vers/fichier/distant /chemin/vers/repertoire/local/

Exemple :

scp admin@serveurweb:/var/log/nginx/access.log ~/logs/

Copie récursive d'un répertoire

Utilisez le drapeau -r pour les répertoires :

scp -r /chemin/vers/repertoire/local nom_utilisateur@nom_hôte_ou_adresse_IP:/chemin/vers/repertoire_parent/distant/

Préservation des attributs de fichier

Pour préserver les heures de modification, les heures d'accès et les modes, utilisez le drapeau -p :

scp -p fichierlocal utilisateur@hôtedistant:/chemin_distant/

sftp (SSH File Transfer Protocol)

sftp fournit un programme de transfert de fichiers interactif, 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 nom_utilisateur@nom_hôte_ou_adresse_IP

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 repertoire_distant : Changer de répertoire distant
  • lcd repertoire_local : Changer de répertoire local
  • get fichier_distant : Télécharger un fichier
  • put fichier_local : Télécharger un fichier
  • mget fichiers_distants : Télécharger plusieurs fichiers (les caractères génériques sont pris en charge)
  • mput fichiers_locaux : Télécharger plusieurs fichiers (les caractères génériques sont pris en charge)
  • exit ou bye : Quitter la session SFTP

Exemple de session SFTP :

sftp [email protected]
Connecté à 192.168.1.100.
sftp> ls
config.ini  data/  logs/  public_html/
sftp> cd public_html
sftp> get index.html
Récupération de /public_html/index.html vers index.html
sftp> put new_page.html
Téléchargement de new_page.html vers /public_html/new_page.html
sftp> bye

Tunnel SSH et redirection de port

Le tunnel SSH, ou redirection de port, vous permet de créer des connexions sécurisées entre des ports locaux et distants, permettant d'accéder à des services qui pourraient autrement être bloqués par des pare-feu ou inaccessibles directement.

Redirection de port locale (-L)

La redirection locale 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 [port_local]:[hôte_distant]:[port_distant] nom_utilisateur@serveur_ssh

Exemple : Accéder à un serveur de base de données (port 3306) sur un réseau privé, via un hôte de rebond serveur_ssh, depuis le port 9000 de votre machine locale.

ssh -L 9000:db.reseau.prive:3306 [email protected]

Maintenant, vous pouvez vous connecter à localhost:9000 sur votre machine locale, et la connexion sera redirigée de manière sécurisée vers db.reseau.prive:3306 via passerelle.com.

Redirection de port distante (-R)

La redirection distante rend un service sur 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 [port_distant]:[hôte_local]:[port_local] nom_utilisateur@serveur_ssh

Exemple : Rendre un serveur web local (port 8000) accessible depuis serveur_ssh sur le port 8080.

ssh -R 8080:localhost:8000 admin@serveur_distant.com

Maintenant, toute personne sur serveur_distant.com peut accéder à votre serveur web local en se connectant à localhost:8080 sur serveur_distant.com.

Redirection de port dynamique (-D)

La redirection de port dynamique crée un proxy SOCKS, vous permettant d'acheminer tout votre trafic (ou le trafic spécifique à une application) via le tunnel SSH. Ceci est utile pour contourner les pare-feu ou sécuriser la navigation.

ssh -D [port_local] nom_utilisateur@serveur_ssh

Exemple : Créer un proxy SOCKS sur le port 1080 de votre machine locale via serveur_ssh.

ssh -D 1080 [email protected]

Configurez votre navigateur ou application pour utiliser localhost:1080 comme proxy SOCKS5, et tout son trafic réseau sera tunnelé via passerelle.com.

Utilisation avancée de SSH et astuces

Exécution de commandes en arrière-plan

Pour les commandes non interactives qui doivent s'exécuter et se détacher, vous pouvez utiliser le drapeau -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.reseau.prive:3306 [email protected]

Ceci configure une redirection de port locale en arrière-plan.

Agent SSH et ssh-add

L'ssh-agent est un programme qui conserve vos clés privées en mémoire, afin que vous n'ayez à saisir votre phrase de passe qu'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/vos clé(s) à l'agent
ssh-add ~/.ssh/id_ed25519
ssh-add ~/.ssh/id_ed25519_web # Pour une clé spécifique

Le forwarding d'agent peut vous permettre de vous authentifier depuis un hôte de rebond vers un autre serveur sans copier votre clé privée sur l'hôte de rebond. Utilisez-le avec parcimonie : un hôte de rebond compromis pourrait utiliser votre agent transféré pendant que votre session est active. Préférez ProxyJump lorsque vous avez seulement besoin de passer par un bastion.

ssh -J [email protected] [email protected]

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/%C
    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 jusqu'à 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_ed25519), les clés publiques (chmod 644 ~/.ssh/id_ed25519.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.
  • Délai de connexion expiré : Le serveur peut être hors service, le pare-feu peut bloquer le port 22 (ou le port personnalisé), ou l'adresse IP est incorrecte.
  • Sortie verbeuse : Utilisez les drapeaux -v, -vv ou -vvv avec ssh pour des informations de débogage détaillées.
    ssh -vvv [email protected]
    

À retenir

Gardez votre flux de travail SSH quotidien simple : utilisez l'authentification par clé, stockez les options répétées dans ~/.ssh/config, copiez les fichiers avec scp ou sftp, et atteignez les services privés avec -L, -R, -D ou -J si nécessaire. Lorsqu'une connexion échoue, ssh -vvv est généralement le moyen le plus rapide de voir si le problème est lié au DNS, au routage, à l'authentification ou à la politique du serveur.