kubenow
Se connecterCommencer gratuitement

L.13 · Pour aller plus loin

SSH : clés, configuration, tunnels

Leçon théorique · questionnaire de validation · gratuit, dans le navigateur

SSH est la porte d'entrée de tous les serveurs Linux : administration à distance, copie de fichiers, accès Git, automatisation avec Ansible. Bien l'utiliser, c'est gagner du temps ; bien le configurer, c'est fermer la première cible des attaquants. Cette leçon est théorique : votre machine de lab n'a pas de client SSH, et aucun serveur à joindre.

Ce que vous saurez à la fin : vous connecter avec une clé plutôt qu'un mot de passe, organiser vos connexions dans ~/.ssh/config, copier des fichiers, utiliser un rebond et un tunnel, et durcir un serveur SSH.

1. Se connecter

ssh [email protected]                # utilisateur@machine
ssh -p 2222 [email protected]        # sur un autre port
ssh eleve@serveur 'df -h'             # lance une seule commande et rend la main

À la première connexion, SSH affiche l'empreinte de la clé du serveur et demande confirmation. Elle est ensuite gardée dans ~/.ssh/known_hosts. Si elle change un jour, SSH refuse avec un avertissement : soit le serveur a été réinstallé, soit quelqu'un s'intercale. Vérifiez avant de supprimer l'ancienne entrée (ssh-keygen -R serveur).

2. Les clés plutôt que les mots de passe

ssh-keygen -t ed25519 -C "eleve@portable"     # crée ~/.ssh/id_ed25519 (privée) et id_ed25519.pub (publique)
ssh-copy-id eleve@serveur                     # ajoute la clé publique dans ~/.ssh/authorized_keys du serveur
ssh eleve@serveur                             # plus de mot de passe
  • La clé privée ne quitte jamais votre machine, protégée par une phrase de passe et des droits 600.
  • La clé publique se distribue librement.
  • ssh-agent garde la clé déverrouillée le temps de la session : eval "$(ssh-agent -s)" && ssh-add.

3. ~/.ssh/config : des raccourcis

Host bastion
    HostName 203.0.113.10
    User eleve
    IdentityFile ~/.ssh/id_ed25519

Host app-*
    User deploy
    ProxyJump bastion          # passe par le bastion pour joindre les serveurs internes

ssh bastion suffit, et ssh app-01 traverse automatiquement le bastion. Un bastion est la seule machine exposée sur Internet : les autres ne sont joignables qu'à travers lui.

4. Copier et tunnelliser

scp fichier.tar.gz bastion:/tmp/              # copie simple
rsync -avz dossier/ bastion:/srv/dossier/      # synchronisation : ne transfère que les différences
ssh -L 5432:base-interne:5432 bastion          # tunnel local : localhost:5432 mène à la base interne

Le tunnel -L est précieux pour joindre un service qui n'est pas exposé (une base de données, un tableau de bord) sans ouvrir de port. kubectl port-forward applique la même idée dans Kubernetes.

5. Durcir le serveur

Dans /etc/ssh/sshd_config (ou un fichier de /etc/ssh/sshd_config.d/) :

PasswordAuthentication no        # clés seulement : fin des attaques par mot de passe
PermitRootLogin no               # on se connecte en utilisateur, puis sudo
PubkeyAuthentication yes
AllowUsers eleve deploy          # liste blanche des comptes autorisés
sudo sshd -t                     # vérifie la configuration AVANT de recharger
sudo systemctl reload ssh

Gardez toujours une session ouverte pendant que vous testez une nouvelle configuration dans une seconde fenêtre : une erreur pourrait vous enfermer dehors. Ajoutez ensuite un pare-feu (leçon L.14) et un outil qui bannit les adresses trop insistantes, comme fail2ban.

Validez la leçon avec le questionnaire.

Contenu aligné sur les programmes publiés par la CNCF (KCNA, CKAD, CKA, CKS), par le Linux Professional Institute (LPIC-1) et par Cisco (CCNA 200-301). KubeNow n'est ni affilié ni approuvé par la CNCF, la Linux Foundation, le LPI ou Cisco ; CKA, CKAD, CKS et KCNA sont des marques de la Linux Foundation, LPIC-1 est une marque du Linux Professional Institute, Cisco et CCNA sont des marques de Cisco Systems.