Ce que vous allez apprendre

Vous savez vous connecter à un serveur avec ssh user@ip. Maintenant, rendez votre workflow professionnel : plus de mots de passe, des connexions en un mot, et des transferts de fichiers rapides.


Les clés SSH — fini les mots de passe

Un mot de passe peut être deviné, volé ou intercepté. Une clé SSH est une paire de fichiers cryptographiques :

  • Clé privée (id_ed25519) — reste sur votre ordinateur, ne se partage jamais
  • Clé publique (id_ed25519.pub) — placée sur le serveur, peut être partagée

Quand vous vous connectez, SSH vérifie que votre clé privée correspond à la clé publique sur le serveur. Pas de mot de passe échangé, pas d'interception possible.


Générer une paire de clés

ssh-keygen -t ed25519 -C "mon-serveur-production"

Options : - -t ed25519 : algorithme moderne (préférable à RSA) - -C "commentaire" : étiquette pour identifier la clé

Appuyez sur Entrée pour accepter l'emplacement par défaut (~/.ssh/id_ed25519).

Vous pouvez définir une passphrase (recommandé) — un mot de passe qui protège votre clé privée locale.


Copier la clé publique sur le serveur

Méthode automatique (recommandée)

ssh-copy-id ubuntu@41.190.32.14

Cette commande copie votre clé publique dans ~/.ssh/authorized_keys sur le serveur. Vous devrez entrer votre mot de passe une dernière fois.

Méthode manuelle

# Afficher votre clé publique
cat ~/.ssh/id_ed25519.pub

# Sur le serveur, ajouter la clé
mkdir -p ~/.ssh
echo "votre-cle-publique-ici" >> ~/.ssh/authorized_keys
chmod 700 ~/.ssh
chmod 600 ~/.ssh/authorized_keys

Tester la connexion par clé

ssh ubuntu@41.190.32.14

Si tout est bien configuré, vous vous connectez sans mot de passe.


Utiliser plusieurs clés — spécifier la clé manuellement

Si vous avez plusieurs clés pour différents serveurs :

ssh -i ~/.ssh/ma-cle-specifique ubuntu@41.190.32.14

L'option -i spécifie le fichier de clé privée à utiliser.


Le fichier ~/.ssh/config — simplifier les connexions

Le fichier ~/.ssh/config permet de définir des alias et options pour chaque serveur. Créez-le si il n'existe pas :

nano ~/.ssh/config

Exemple de configuration :

# Serveur de production
Host production
    HostName 41.190.32.14
    User ubuntu
    IdentityFile ~/.ssh/id_ed25519
    Port 22

# Serveur de staging
Host staging
    HostName 41.190.32.99
    User ubuntu
    IdentityFile ~/.ssh/id_ed25519_staging
    Port 2222

# Serveur de développement
Host dev
    HostName 192.168.1.100
    User developer
    IdentityFile ~/.ssh/id_ed25519_dev

Désormais, au lieu de ssh ubuntu@41.190.32.14, vous tapez simplement :

ssh production
ssh staging
ssh dev

Options utiles dans ~/.ssh/config

Host mon-serveur
    HostName 41.190.32.14
    User ubuntu
    IdentityFile ~/.ssh/id_ed25519

    # Garder la connexion active (évite les déconnexions)
    ServerAliveInterval 60
    ServerAliveCountMax 3

    # Compression des données (utile sur connexion lente)
    Compression yes

    # Réutiliser les connexions existantes (plus rapide)
    ControlMaster auto
    ControlPath ~/.ssh/sockets/%r@%h-%p
    ControlPersist 600

SCP — transférer des fichiers

SCP (Secure Copy Protocol) est l'outil classique pour transférer des fichiers via SSH.

# Envoyer un fichier vers le serveur
scp rapport.pdf ubuntu@production:/home/ubuntu/documents/

# Avec l'alias du config
scp rapport.pdf production:/home/ubuntu/documents/

# Télécharger un fichier depuis le serveur
scp production:/var/log/nginx/access.log ./logs-nginx.txt

# Transférer un dossier entier (-r pour récursif)
scp -r ./mon-app production:/var/www/html/

# Afficher la progression (-v pour verbose)
scp -v gros-fichier.zip production:/tmp/

rsync — synchronisation efficace

rsync est plus puissant que SCP. Il ne transfère que les fichiers modifiés — parfait pour déployer une application.

# Synchroniser un dossier local vers le serveur
rsync -avz ./mon-app/ production:/var/www/mon-app/

# Options expliquées :
# -a : mode archive (préserve permissions, dates, liens)
# -v : verbose (affiche les fichiers transférés)
# -z : compression pendant le transfert

# Exclure certains fichiers
rsync -avz --exclude='node_modules' --exclude='.git' ./mon-app/ production:/var/www/

# Simulation (voir ce qui serait transféré sans rien toucher)
rsync -avzn ./mon-app/ production:/var/www/mon-app/

L'agent SSH — gérer vos clés avec passphrase

Si votre clé privée a une passphrase, vous devrez la saisir à chaque connexion. L'agent SSH la mémorise pour la session :

# Démarrer l'agent (souvent automatique sur Linux/macOS)
eval $(ssh-agent -s)

# Ajouter votre clé à l'agent
ssh-add ~/.ssh/id_ed25519

# Lister les clés chargées dans l'agent
ssh-add -l

# Supprimer toutes les clés de l'agent
ssh-add -D

Un exemple concret — déploiement depuis Kinshasa

Un développeur à Kinshasa gère un serveur de production en Afrique du Sud. Son workflow :

# 1. Son fichier ~/.ssh/config contient :
#    Host prod → ubuntu@41.190.32.14 avec sa clé dédiée

# 2. Il déploie son application
rsync -avz --exclude='node_modules' --exclude='.env'     ./app/ prod:/var/www/app/

# 3. Il se connecte pour redémarrer le serveur
ssh prod "sudo systemctl restart myapp"

# 4. Il vérifie les logs
ssh prod "sudo tail -f /var/log/myapp/app.log"

Tout ça sans jamais taper un mot de passe.


À retenir

  • Les clés SSH remplacent les mots de passe — plus sécurisé et plus pratique
  • ssh-copy-id user@ip — copie automatiquement votre clé publique sur le serveur
  • ~/.ssh/config — définissez des alias pour chaque serveur (ex: ssh prod)
  • scp — transférer des fichiers ; rsync — synchroniser efficacement (ne transfère que les différences)
  • L'agent SSH (ssh-add) mémorise votre passphrase pendant la session

Prochaine étape

Sécurisez votre serveur SSH contre les attaques : désactivez l'authentification par mot de passe, configurez fail2ban, et maîtrisez les tunnels SSH pour des connexions avancées.