Secure Shell (SSH)

1. Introduction à Secure Shell (SSH)

Définition

SSH est un protocole réseau cryptographique permettant de sécuriser …​

…​

les communications entre deux systèmes sur un réseau non sécurisé.

SSH a remplacé les protocoles non chiffrés comme Telnet, rlogin et FTP dans la quasi-totalité des usages d’administration moderne.

Utilisations principales

  • Accès à distance à des serveurs ou équipements réseau

  • Exécution de commandes et scripts à distance

  • Transfert de fichiers sécurisé (SCP, SFTP)

  • Tunneling et redirection de ports

2. Caractéristiques principales

Chiffrement

Algorithmes modernes : AES, ChaCha20, RSA, ECDSA, Ed25519.

Authentification

  • Par mot de passe

  • Par clés publiques/privées (recommandé)

  • Par certificats SSH

  • MFA via PAM, U2F, hardware tokens

Flexibilité

Connexions interactives, scripts, transferts SCP/SFTP, tunnels.

3. Fonctionnement

Établissement de connexion

  • Le client SSH initie une session avec le serveur

  • Négociation des algorithmes (key exchange, cipher, MAC)

  • Échange de clés (Diffie-Hellman / ECDH)

  • Authentification du serveur (clé d’hôte)

  • Authentification du client (mot de passe ou clé)

Communication chiffrée

Les données échangées sont chiffrées de bout en bout.

4. Configuration d’un serveur SSH

Installation

Sous Debian/Ubuntu

sudo apt update
sudo apt install openssh-server

Sous Red Hat/CentOS

sudo yum install openssh-server
sudo systemctl enable --now sshd

4. Configuration (suite)

Démarrage du service

sudo systemctl start ssh
sudo systemctl enable ssh
sudo systemctl status ssh

Fichier de configuration

/etc/ssh/sshd_config — modifier puis redémarrer :

sudo systemctl restart ssh

4. Options de sécurisation clés

# Changer le port par défaut
Port 2222

# Interdire la connexion root
PermitRootLogin no

# Authentification par clé uniquement
PasswordAuthentication no
PubkeyAuthentication yes

# Limiter les utilisateurs autorisés
AllowUsers alice bob

# Limiter les tentatives
MaxAuthTries 3
LoginGraceTime 30

Toujours tester la nouvelle configuration dans une seconde session avant de fermer la session active — un sshd_config cassé peut vous verrouiller dehors !

5. Connexion SSH

Connexion simple

ssh username@hostname_or_ip

Avec un port personnalisé

ssh -p 2222 username@hostname

Génération d’une paire de clés

ssh-keygen -t ed25519 -C "boris@example.com"

Préférer Ed25519 à RSA : clés plus courtes, signatures plus rapides, sécurité équivalente à RSA-3072.

Copie de la clé publique

ssh-copy-id username@hostname

6. Transfert de fichiers

SCP (Secure Copy)

# Local → distant
scp file.txt user@host:/remote/path/

# Distant → local
scp user@host:/remote/file.txt /local/path/

# Récursif
scp -r dossier/ user@host:/remote/

SFTP

sftp user@host

# Commandes courantes :
# ls, cd, pwd, get, put, mget, mput

7. Tunneling SSH

Redirection locale (-L)

# Accéder à une BDD distante via le tunnel
ssh -L 3306:localhost:3306 user@host

Redirection distante (-R)

# Exposer un service local sur le serveur distant
ssh -R 8080:localhost:80 user@host

Proxy SOCKS dynamique (-D)

ssh -D 1080 user@host

Le tunneling SSH est un VPN du pauvre : utile pour traverser un firewall ou accéder à un service interne sans VPN dédié.

8. Bonnes pratiques de sécurisation

  • Utiliser uniquement des clés (jamais de mot de passe)

  • Désactiver root (PermitRootLogin no)

  • Limiter les utilisateurs (AllowUsers)

  • Restreindre par IP via le pare-feu ou Match Address

  • Surveiller les logs (/var/log/auth.log)

  • Installer Fail2Ban contre le brute-force

  • Mettre à jour régulièrement OpenSSH

Exemple Fail2Ban

sudo apt install fail2ban
sudo systemctl enable --now fail2ban

8. Sécurisation (suite)

Restriction par pare-feu

# UFW : autoriser SSH depuis le LAN uniquement
sudo ufw allow from 192.168.1.0/24 to any port 22

# nftables / iptables
iptables -A INPUT -p tcp --dport 22 \
  -s 10.0.0.0/8 -j ACCEPT
iptables -A INPUT -p tcp --dport 22 -j DROP

Ne jamais exposer SSH directement sur Internet sans : clés uniquement, fail2ban, port non standard ou bastion d’accès.

9. Outils et extensions

  • Tmux / Screen — sessions persistantes

  • Fail2Ban — bloque les attaques brute force

  • ssh-agent — déverrouille les clés une seule fois

  • PuTTY / MobaXterm — clients Windows

  • Ansible / Fabric — automation multi-serveurs

  • SSHFS — monter un répertoire distant

Exemple SSHFS

sshfs user@host:/remote/dir /local/mount/point

10. Applications avancées

Authentification sans mot de passe

Idéal pour scripts CI/CD, sauvegardes automatisées, déploiement.

Cluster management

# Ansible : exécuter une commande sur tous les serveurs
ansible all -i inventory -m shell -a "uptime"

Certificats SSH

Plus scalable que les clés publiques pour des grandes flottes (révocation centralisée, durée de vie limitée).

Conclusion

SSH est l’outil universel d’administration distante. Bien configuré (clés, port custom, fail2ban, bastion), il offre un excellent compromis sécurité/ergonomie.

Toujours préférer SSH à Telnet, FTP, rlogin — qui transmettent les credentials en clair.

À combiner avec : Hardening · Moindre privilège · Routeurs · 802.1X