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"