Aller au contenu

Administration à distance sécurisée via SSH

1. Objectif du cours

Mettre en place et durcir un accès SSH sur Debian 13 : installation d'OpenSSH, génération et déploiement d'une clé Ed25519 selon l'ANSSI, durcissement de sshd, et maîtrise des transferts sécurisés (scp, sftp) avec contrôles d'intégrité et traçabilité.

2. Notions et définitions essentielles

  • SSH : protocole chiffré garantissant confidentialité, intégrité et authentification mutuelle pour l'administration distante.
  • OpenSSH / sshd : paquet et démon côté serveur qui traitent les connexions SSH.
  • Paire de clés (privée/publique) : mécanisme asymétrique remplaçant le mot de passe ; Ed25519 recommandé.
  • TOFU (Trust On First Use) : validation initiale de l'empreinte d'hôte et stockage dans known_hosts.
  • authorized_keys : fichier côté serveur listant les clés publiques autorisées pour un compte.
  • ChrootDirectory : confinement SFTP d’un compte à un répertoire racine contrôlé.

3. Fonctionnement et principes

  • SSHv2 obligatoire : SSHv1 est obsolète et vulnérable.
  • Le client ssh initie et chiffre la session ; le démon sshd écoute et applique la configuration (sshd_config et fichiers inclus).
  • Authentification par clé : le serveur vérifie la clé publique (authorized_keys) sans que la clé privée quitte le poste client.
  • Durcissement = réduire surface d'attaque (interdire root direct, désactiver mots de passe, limiter comptes autorisés) et assurer traçabilité via journaux (LogLevel INFO).
  • Transferts : scp pour actions ponctuelles, sftp pour sessions interactives et gestion multi-fichiers ; rsync via SSH pour sauvegardes.

4. Commandes et manipulations

Groupées par procédure (extraits essentiels présents dans le document) :

  • Vérifier et gérer le service OpenSSH :
  • systemctl status ssh — état et journaux
  • apt install openssh-server
  • systemctl start ssh
  • systemctl enable ssh

  • Vérifier la version / empreinte d'hôte :

  • ssh -V (ou sshd -V)
  • ssh-keygen -lf /etc/ssh/ssh_host_ed25519_key.pub — afficher empreinte côté serveur

  • Génération et protection de la paire de clés (client) :

  • ssh-keygen -t ed25519 -C "technicien@pme-cliente"
  • chmod 700 ~/.ssh/ ; chmod 600 ~/.ssh/id_ed25519 ; chmod 644 ~/.ssh/id_ed25519.pub

  • Déploiement et test de la clé publique :

  • ssh-copy-id -i ~/.ssh/id_ed25519.pub utilisateur@adresse-serveur
  • cat ~/.ssh/authorized_keys (vérifier côté serveur)
  • ssh -i ~/.ssh/id_ed25519 utilisateur@adresse-serveur (tester la connexion par clé)
  • ssh -v ou ssh -vv (diagnostic si nécessaire)

  • Vérifier puis appliquer la configuration sshd sans couper les sessions :

  • sshd -t (test de syntaxe)
  • systemctl reload ssh (appliquer sans terminer sessions actives)

  • Transferts et vérifications d'intégrité :

  • scp [options] source destination (exemples fournis)
  • sha256sum fichier (comparaison source/serveur via ssh utilisateur@serveur "sha256sum chemin")
  • sftp utilisateur@hôte (session interactive)
  • journalctl -u ssh --since "today" | grep sftp (recherche d'événements SFTP)

  • Synchronisation :

  • rsync -avz -e ssh source destination (exemple de synchronisation via SSH)

5. Sécurité et bonnes pratiques

  • Vérifier localement que sshd est installé et actif avant d'ouvrir l'administration distante.
  • Toujours vérifier l'empreinte d'hôte (TOFU) via la commande ssh-keygen côté serveur ; ne pas accepter aveuglément.
  • Protéger la clé privée par une passphrase robuste ; la passphrase est indispensable selon l'ANSSI.
  • Appliquer des permissions strictes sur ~/.ssh et les clés ; OpenSSH ignore une clé privée ou authorized_keys si droits trop ouverts.
  • Tester systématiquement la connexion par clé depuis un second terminal avant de désactiver l'authentification par mot de passe.
  • Ne jamais supprimer une entrée known_hosts sans vérifier par un canal alternatif (console physique, interface hébergeur).
  • Pour ChrootDirectory : s'assurer que le répertoire et tous les composants du chemin appartiennent à root et ne sont pas inscriptibles par le groupe/autres.
  • Tenir à jour une fiche d'exploitation (registre des clés, empreintes, comptes autorisés, procédure de révocation).

6. Points essentiels à retenir pour le TSSR

  • SSH remplace telnet/rsh : chiffrement, intégrité et authentification mutuelle.
  • Préférer Ed25519 (ANSSI) ; RSA 4096 acceptable ; DSA supprimé depuis OpenSSH 10.0.
  • La clé privée reste sur le poste du technicien et doit être chiffrée par une passphrase.
  • Déployer la clé publique dans authorized_keys et auditer régulièrement ce fichier (révocation).
  • Ne pas activer la connexion root directe ; utiliser comptes nominatif + sudo pour traçabilité.
  • Désactiver les authentifications par mot de passe et keyboard-interactive (PAM) après validation de la clé.
  • Tester sshd -t avant reload et garder une session de secours lors des modifications.
  • Vérifier intégrité des transferts (sha256sum) et permissions après copie.
  • Confiner comptes SFTP via ChrootDirectory sous conditions strictes de propriété et permissions.
  • Documenter tout dans la fiche d'exploitation et planifier rotation/révocation des clés.

7. Tableau récapitulatif

Élément Usage / effet Condition importante
Ed25519 vs RSA 4096 Ed25519 recommandé ; RSA 4096 acceptable DSA supprimé (OpenSSH 10.0)
scp Transfert ponctuel non interactif Depuis OpenSSH 9.0, scp utilise SFTP en interne
sftp Session interactive, navigation Permet get/put, cd, lls — mieux pour multi-fichiers
ChrootDirectory Confinement SFTP d’un compte Chemin et composants : propriété root, pas d'écriture groupe/autres
Test config sshd sshd -t puis systemctl reload ssh Conserver session active de secours pour rollback

8. Vérifications pratiques

  • systemctl status ssh — service actif et journaux récents.
  • ssh-keygen -lf /etc/ssh/ssh_host_ed25519_key.pub (côté serveur) — comparer empreinte affichée à celle proposée lors de la première connexion.
  • ls -la ~/.ssh/ (client) — vérifier permissions après génération/déploiement.
  • cat ~/.ssh/authorized_keys (serveur) — confirmer présence de la clé publique.
  • ssh -i ~/.ssh/id_ed25519 utilisateur@serveur — vérifier connexion par clé (passphrase demandée, pas le mot de passe serveur).
  • sshd -t puis systemctl reload ssh — tester syntaxe et appliquer sans couper sessions.
  • ssh root@serveur — vérifier que le login root est refusé (Permission denied).
  • ssh -o PasswordAuthentication=yes -o KbdInteractiveAuthentication=no -o PubkeyAuthentication=no ... — vérifier que l'authentification par mot de passe est refusée.
  • sha256sum (local) vs ssh utilisateur@serveur "sha256sum chemin/fichier" — comparer empreintes.
  • journalctl -u ssh --since "today" | grep sftp — rechercher traces SFTP dans les journaux.

9. Flashcards Anki

Quel paquet Debian fournit le démon sshd ? :: openssh-server Quelle commande affiche l'état du service SSH sous Debian ? :: systemctl status ssh Comment afficher l'empreinte de la clé hôte Ed25519 côté serveur ? :: ssh-keygen -lf /etc/ssh/ssh_host_ed25519_key.pub Quelle commande génère une paire Ed25519 avec un commentaire ? :: ssh-keygen -t ed25519 -C "technicien@pme-cliente" Quelles permissions appliquer sur ~/.ssh/ ? :: chmod 700 Quelle permission appliquer sur la clé privée id_ed25519 ? :: chmod 600 Quel outil automatise le dépôt d'une clé publique sur le serveur ? :: ssh-copy-id -i ~/.ssh/id_ed25519.pub utilisateur@adresse-serveur Comment tester la syntaxe de sshd_config avant rechargement ? :: sshd -t Quelle commande permet d'appliquer la nouvelle configuration sshd sans interrompre les sessions actives ? :: systemctl reload ssh Quelle commande comparer la somme SHA-256 d'un fichier local et celui présent sur le serveur (extrait) ? :: sha256sum (local) et ssh utilisateur@serveur "sha256sum /chemin/fichier"