SSH - Connexion sécurisée
Table des matières
- Qu'est-ce que SSH ?
- Connexion basique
- Clés SSH : génération et utilisation
- ssh-agent et gestion des clés
- Configuration ~/.ssh/config
- scp et rsync
- Exercices pratiques
1 - Qu'est-ce que SSH ?
SSH (Secure Shell) est un protocole de communication sécurisé pour :
- Se connecter à distance à un serveur
- Transférer des fichiers
- Exécuter des commandes
- Créer des tunnels
Avantages de SSH
| Aspect | Description |
|---|---|
| Chiffrement | Toutes les données sont cryptées |
| Authentification | Mot de passe ou clés |
| Intégrité | Détection des modifications |
| Port forwarding | Tunnels sécurisés |
Port par défaut
SSH utilise le port 22 par défaut.
🔝 Retour à la table des matières
2 - Connexion basique
Syntaxe
ssh [options] [user@]hostname [command]
Exemples
# Connexion simple
ssh serveur.example.com
# Avec utilisateur
ssh [email protected]
# Port différent
ssh -p 2222 [email protected]
# Exécuter une commande
ssh [email protected] "ls -la"
# Mode verbeux (debug)
ssh -v [email protected]
Première connexion
The authenticity of host 'serveur.example.com (192.168.1.100)' can't be established.
ED25519 key fingerprint is SHA256:abc123...
Are you sure you want to continue connecting (yes/no/[fingerprint])? yes
Répondez yes seulement si vous êtes sûr de vous connecter au bon serveur ! L'empreinte est stockée dans ~/.ssh/known_hosts.
Options utiles
| Option | Description |
|---|---|
-p PORT | Port SSH |
-l USER | Utilisateur |
-i FILE | Clé privée spécifique |
-v | Mode verbeux (debug) |
-N | Pas de commande (pour tunnels) |
-f | Passer en arrière-plan |
-L | Local port forwarding |
-R | Remote port forwarding |
🔝 Retour à la table des matières
3 - Clés SSH : génération et utilisation
Authentification par clé
Avantages :
- Plus sécurisé que les mots de passe
- Pas besoin de taper le mot de passe
- Authentification automatisée
Générer une paire de clés
# ED25519 (recommandé)
ssh-keygen -t ed25519 -C "[email protected]"
# RSA 4096 bits (alternative)
ssh-keygen -t rsa -b 4096 -C "[email protected]"
Dialogue interactif :
Generating public/private ed25519 key pair.
Enter file in which to save the key (/home/john/.ssh/id_ed25519):
Enter passphrase (empty for no passphrase):
Enter same passphrase again:
Your identification has been saved in /home/john/.ssh/id_ed25519
Your public key has been saved in /home/john/.ssh/id_ed25519.pub
Fichiers générés
| Fichier | Description | Permissions |
|---|---|---|
~/.ssh/id_ed25519 | Clé privée (SECRÈTE !) | 600 |
~/.ssh/id_ed25519.pub | Clé publique | 644 |
La clé privée ne doit JAMAIS être partagée ! Seule la clé publique (.pub) est copiée sur les serveurs.
Copier la clé publique sur un serveur
# Méthode automatique (recommandée)
ssh-copy-id [email protected]
# Méthode manuelle
cat ~/.ssh/id_ed25519.pub | ssh john@serveur "mkdir -p ~/.ssh && cat >> ~/.ssh/authorized_keys"
# Ou copier manuellement
# Sur le serveur, ajouter le contenu de id_ed25519.pub dans :
# ~/.ssh/authorized_keys
Vérifier la connexion par clé
# Connexion sans mot de passe
ssh [email protected]
Permissions importantes
# Sur le client
chmod 700 ~/.ssh
chmod 600 ~/.ssh/id_ed25519
chmod 644 ~/.ssh/id_ed25519.pub
# Sur le serveur
chmod 700 ~/.ssh
chmod 600 ~/.ssh/authorized_keys
🔝 Retour à la table des matières
4 - ssh-agent et gestion des clés
Pourquoi ssh-agent ?
Si votre clé a une passphrase, vous devez la taper à chaque connexion. ssh-agent retient la clé déverrouillée en mémoire.
Utilisation
# Démarrer l'agent
eval "$(ssh-agent -s)"
# Ajouter une clé
ssh-add ~/.ssh/id_ed25519
# Lister les clés chargées
ssh-add -l
# Supprimer toutes les clés
ssh-add -D
Automatiser ssh-agent
Ajoutez dans ~/.bashrc :
# Démarrer ssh-agent automatiquement
if [ -z "$SSH_AUTH_SOCK" ]; then
eval "$(ssh-agent -s)" > /dev/null
fi
Forwarding de l'agent
Permet d'utiliser vos clés locales sur un serveur distant (pour rebondir).
# Connexion avec forwarding d'agent
ssh -A [email protected]
# Depuis serveur1, connexion à serveur2 utilise vos clés
ssh serveur2.example.com
N'utilisez le forwarding d'agent (-A) que vers des serveurs de confiance ! Un admin malveillant pourrait utiliser votre clé.
🔝 Retour à la table des matières
5 - Configuration ~/.ssh/config
Le fichier ~/.ssh/config simplifie les connexions.
Syntaxe
# ~/.ssh/config
Host alias
HostName adresse.serveur.com
User utilisateur
Port 22
IdentityFile ~/.ssh/cle_specifique
Exemple complet
# Serveur de production
Host prod
HostName production.example.com
User deploy
Port 22
IdentityFile ~/.ssh/id_ed25519_prod
# Serveur de développement
Host dev
HostName dev.example.com
User john
ForwardAgent yes
# Serveur avec jump host (bastion)
Host interne
HostName 192.168.1.100
User admin
ProxyJump bastion
# Bastion / Jump host
Host bastion
HostName bastion.example.com
User jump_user
IdentityFile ~/.ssh/id_ed25519_bastion
# Paramètres par défaut
Host *
ServerAliveInterval 60
ServerAliveCountMax 3
AddKeysToAgent yes
Utilisation
# Au lieu de :
ssh -p 22 -i ~/.ssh/id_ed25519_prod [email protected]
# Simplement :
ssh prod
Options utiles
| Option | Description |
|---|---|
HostName | Adresse réelle |
User | Utilisateur par défaut |
Port | Port SSH |
IdentityFile | Clé privée à utiliser |
ForwardAgent | Activer le forwarding d'agent |
ProxyJump | Passer par un bastion |
ServerAliveInterval | Keepalive |
Compression | Activer la compression |
🔝 Retour à la table des matières
6 - scp et rsync
scp - Copie sécurisée
# Copier un fichier vers le serveur
scp fichier.txt john@serveur:/home/john/
# Copier depuis le serveur
scp john@serveur:/var/log/app.log ./
# Copier un répertoire
scp -r dossier/ john@serveur:/home/john/
# Port différent
scp -P 2222 fichier.txt john@serveur:/home/john/
# Avec alias du config
scp fichier.txt prod:/home/deploy/
rsync - Synchronisation
# Installer si nécessaire
sudo apt install rsync
# Synchroniser un dossier (push)
rsync -avz dossier/ john@serveur:/backup/dossier/
# Synchroniser depuis le serveur (pull)
rsync -avz john@serveur:/var/www/ ./www_backup/
# Avec suppression des fichiers supprimés
rsync -avz --delete source/ john@serveur:/destination/
# Dry run (simulation)
rsync -avzn source/ john@serveur:/destination/
# Exclure des fichiers
rsync -avz --exclude='*.log' --exclude='node_modules/' source/ dest/
# Avec progression
rsync -avz --progress source/ john@serveur:/destination/
Options rsync
| Option | Description |
|---|---|
-a | Archive (récursif, permissions, etc.) |
-v | Verbeux |
-z | Compression pendant le transfert |
-n | Dry run (simulation) |
--delete | Supprimer les fichiers absents de la source |
--exclude | Exclure des fichiers |
--progress | Afficher la progression |
-e | Spécifier le shell (ex: -e "ssh -p 2222") |
Comparaison scp vs rsync
| Aspect | scp | rsync |
|---|---|---|
| Synchronisation incrémentale | Non | Oui |
| Reprise après interruption | Non | Oui |
| Compression | Option | Option |
| Complexité | Simple | Plus d'options |
| Usage | Copies ponctuelles | Sauvegardes, synchro |
🔝 Retour à la table des matières
7 - Exercices pratiques
Exercice 1 : Générer et installer une clé
# 1. Générez une nouvelle clé
ssh-keygen -t ed25519 -C "test-key" -f ~/.ssh/id_test
# 2. Affichez la clé publique
cat ~/.ssh/id_test.pub
# 3. Si vous avez un serveur, copiez-la
# ssh-copy-id -i ~/.ssh/id_test john@serveur
Exercice 2 : Configurer ~/.ssh/config
# 1. Créez ou éditez le fichier
nano ~/.ssh/config
# 2. Ajoutez un alias
# Host monserveur
# HostName example.com
# User john
# IdentityFile ~/.ssh/id_test
# 3. Testez
# ssh monserveur
Exercice 3 : Transfert de fichiers
# Si vous avez accès à un serveur :
# 1. Créez un fichier de test
echo "Test SSH" > test_ssh.txt
# 2. Copiez avec scp
# scp test_ssh.txt monserveur:/tmp/
# 3. Vérifiez
# ssh monserveur "cat /tmp/test_ssh.txt"
Quiz
Q1. Quelle commande génère une paire de clés ED25519 ?
Réponse
ssh-keygen -t ed25519
Q2. Quelles permissions doit avoir la clé privée ?
Réponse
600 (chmod 600 ~/.ssh/id_ed25519)
Q3. Comment copier une clé publique sur un serveur ?
Réponse
ssh-copy-id user@serveur
🔝 Retour à la table des matières
Points clés à retenir
- SSH = connexion sécurisée sur port 22
- Clés ED25519 recommandées (plus sécurisées, plus courtes)
- Clé privée = secrète, clé publique = distribuée
ssh-copy-idpour installer facilement la clé publique~/.ssh/configsimplifie les connexionsrsync>scppour les synchronisations régulières- Toujours vérifier les permissions (700/600)
🔝 Retour à la table des matières
← Chapitre précédent | Chapitre suivant : Pare-feu et sécurité →