Aller au contenu principal

SSH - Connexion sécurisée


Table des matières

  1. Qu'est-ce que SSH ?
  2. Connexion basique
  3. Clés SSH : génération et utilisation
  4. ssh-agent et gestion des clés
  5. Configuration ~/.ssh/config
  6. scp et rsync
  7. 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

AspectDescription
ChiffrementToutes les données sont cryptées
AuthentificationMot de passe ou clés
IntégritéDétection des modifications
Port forwardingTunnels 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
astuce

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

OptionDescription
-p PORTPort SSH
-l USERUtilisateur
-i FILEClé privée spécifique
-vMode verbeux (debug)
-NPas de commande (pour tunnels)
-fPasser en arrière-plan
-LLocal port forwarding
-RRemote 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

FichierDescriptionPermissions
~/.ssh/id_ed25519Clé privée (SECRÈTE !)600
~/.ssh/id_ed25519.pubClé publique644
danger

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
attention

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

OptionDescription
HostNameAdresse réelle
UserUtilisateur par défaut
PortPort SSH
IdentityFileClé privée à utiliser
ForwardAgentActiver le forwarding d'agent
ProxyJumpPasser par un bastion
ServerAliveIntervalKeepalive
CompressionActiver 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

OptionDescription
-aArchive (récursif, permissions, etc.)
-vVerbeux
-zCompression pendant le transfert
-nDry run (simulation)
--deleteSupprimer les fichiers absents de la source
--excludeExclure des fichiers
--progressAfficher la progression
-eSpécifier le shell (ex: -e "ssh -p 2222")

Comparaison scp vs rsync

Aspectscprsync
Synchronisation incrémentaleNonOui
Reprise après interruptionNonOui
CompressionOptionOption
ComplexitéSimplePlus d'options
UsageCopies ponctuellesSauvegardes, 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-id pour installer facilement la clé publique
  • ~/.ssh/config simplifie les connexions
  • rsync > scp pour 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é →