SSH - Connexion Sécurisée à un Serveur VPS : Guide Complet 2025

Alternative RVB | SSH - Connexion Sécurisée à un Serveur VPS : Guide Complet 2025

Linux
SSH - Connexion Sécurisée à un Serveur VPS : Guide Complet 2025
14 min de lecture

Apprenez à configurer et utiliser SSH (Secure Shell) pour vous connecter en toute sécurité à votre serveur VPS ou serveur distant. Ce tutoriel complet couvre l’installation, la configuration des clés SSH, et les bonnes pratiques de sécurité.

Table des matières

  1. Qu’est-ce que SSH et pourquoi l’utiliser ?
  2. Prérequis
  3. Installation de SSH
  4. Première connexion SSH
  5. Authentification par clés SSH (méthode recommandée)
  6. Configuration avancée du fichier SSH config
  7. Connexion automatique sans passphrase
  8. Gestion des clés SSH
  9. Sécurisation de votre serveur SSH
  10. Résolution des problèmes courants

Qu’est-ce que SSH et pourquoi l’utiliser ?

SSH (Secure Shell) est un protocole de communication sécurisé permettant de :

  • Se connecter à distance à un serveur Linux/Unix
  • Transférer des fichiers de manière cryptée
  • Exécuter des commandes à distance en toute sécurité
  • Remplacer les protocoles non sécurisés comme Telnet ou FTP

Avantages de SSH : Chiffrement des données, authentification forte, tunnel sécurisé pour d’autres protocoles.

Prérequis

Côté client (votre ordinateur) :

  • Windows 10/11 avec WSL 2, macOS, ou Linux
  • Terminal Bash (WSL, Terminal Windows, ou terminal natif)
  • Accès Internet

Côté serveur :

  • Serveur VPS avec Linux (Ubuntu, Debian, CentOS, etc.)
  • Accès root ou utilisateur avec privilèges sudo
  • Adresse IP du serveur

Installation de SSH

Sur Windows (WSL 2)

Ouvrez votre terminal WSL et installez le client SSH :

sudo apt update
sudo apt install openssh-client

Ou pour une installation complète :

## Client uniquement
sudo apt install openssh-client

# Serveur uniquement (si vous voulez aussi accepter des connexions)
sudo apt install openssh-server

# Les deux en même temps
sudo apt install ssh

Pour vérifier l’installation :

ssh -V

Vous devriez voir la version d’OpenSSH installée (ex: OpenSSH_8.9p1).

Sur macOS

SSH est préinstallé sur macOS. Vérifiez simplement la version :

ssh -V

Sur Linux (Ubuntu/Debian)

sudo apt update
sudo apt install openssh-client

Options d’installation :

# Client uniquement
sudo apt install openssh-client

# Serveur uniquement
sudo apt install openssh-server

# Les deux
sudo apt install ssh

Installation du serveur SSH (côté serveur)

Si vous configurez un serveur :

sudo apt update
sudo apt install openssh-server

Vérifier et gérer le service SSH

La commande à utiliser dépend de votre système d’exploitation :

Sur les systèmes modernes (Ubuntu 16.04+, Debian 8+, CentOS 7+)

Utilisez systemctl :

# Vérifier le statut
sudo systemctl status ssh

# Démarrer le service
sudo systemctl start ssh

# Arrêter le service
sudo systemctl stop ssh

# Redémarrer le service
sudo systemctl restart ssh

# Activer au démarrage
sudo systemctl enable ssh

# Désactiver au démarrage
sudo systemctl disable ssh

Sur les systèmes plus anciens (Ubuntu < 16.04, Debian < 8)

Utilisez service :

# Vérifier le statut
sudo service ssh status

# Démarrer le service
sudo service ssh start

# Arrêter le service
sudo service ssh stop

# Redémarrer le service
sudo service ssh restart

ℹ️ Info Sur les systèmes modernes, service fonctionne toujours (il redirige vers systemctl), mais systemctl est la méthode recommandée.

Comment savoir quelle commande utiliser ?

# Vérifier si systemd est utilisé
ps -p 1

# Si vous voyez "systemd", utilisez systemctl
# Si vous voyez "init", utilisez service

Ou plus simplement :

# Cette commande fonctionne sur tous les systèmes
which systemctl && echo "Utilisez systemctl" || echo "Utilisez service"

Première connexion SSH

Test en local

Testez d’abord votre configuration SSH en local :

ssh votre_nom_utilisateur@localhost

Entrez votre mot de passe lorsque demandé.

Connexion à un serveur distant

ssh nom_utilisateur@adresse_ip_serveur

Exemple :

ssh ubuntu@192.168.1.100

Ou avec un nom de domaine :

ssh root@monserveur.com
À noter
Lors de la première connexion, vous verrez un message concernant l’authenticité de l’hôte. Tapez yes pour continuer.

Authentification par clés SSH (méthode recommandée)

L’authentification par clés SSH est beaucoup plus sécurisée que l’authentification par mot de passe. Voici comment la configurer.

Étape 1 : Générer une paire de clés SSH

À effectuer côté client uniquement
Cette étape doit être réalisée sur votre ordinateur local, pas sur le serveur.

Méthode moderne (recommandée en 2025) - Ed25519 :

ssh-keygen -t ed25519 -C "votre.email@example.com"

Alternative pour les serveurs anciens - RSA 4096 bits :

ssh-keygen -t rsa -b 4096 -C "votre.email@example.com"

Version minimale (RSA par défaut) :

ssh-keygen -t rsa

Lors de la génération :

  1. Validez l’emplacement par défaut (~/.ssh/id_ed25519 ou ~/.ssh/id_rsa)
  2. Définissez une passphrase robuste (recommandé pour plus de sécurité)

Étape 2 : Copier la clé publique sur le serveur

Méthode automatique (recommandée) :

ssh-copy-id -i ~/.ssh/id_ed25519.pub nom_utilisateur@adresse_ip_serveur

Pour RSA :

ssh-copy-id -i ~/.ssh/id_rsa.pub nom_utilisateur@adresse_ip_serveur

Entrez le mot de passe du serveur une dernière fois.

Méthode manuelle (si ssh-copy-id ne fonctionne pas) :

cat ~/.ssh/id_ed25519.pub | ssh nom_utilisateur@serveur "mkdir -p ~/.ssh && cat >> ~/.ssh/authorized_keys"

Si l’authentification par mot de passe est déjà désactivée sur le serveur :

ssh nom_utilisateur@serveur "echo $(cat ~/.ssh/id_ed25519.pub) >> .ssh/authorized_keys"

Ou pour RSA :

ssh nom_utilisateur@serveur "echo $(cat ~/.ssh/id_rsa.pub) >> .ssh/authorized_keys"

Étape 3 : Se connecter avec la clé SSH

ssh nom_utilisateur@adresse_ip_serveur

Vous devrez maintenant entrer votre passphrase (et non plus le mot de passe du serveur).

Vérifier les permissions correctes

Sur le serveur, assurez-vous que les permissions sont correctes :

chmod 700 ~/.ssh
chmod 600 ~/.ssh/authorized_keys

Configuration avancée du fichier SSH config

Le fichier ~/.ssh/config permet de simplifier vos connexions SSH en créant des alias.

Créer et éditer le fichier config

touch ~/.ssh/config
chmod 600 ~/.ssh/config
nano ~/.ssh/config

Ou avec cat :

cat ~/.ssh/config

Exemple de configuration

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

# Serveur de développement
Host dev
    HostName dev.monsite.com
    User devuser
    Port 2222
    IdentityFile ~/.ssh/id_rsa

# Configuration globale
Host *
    AddKeysToAgent yes
    ServerAliveInterval 60
    ServerAliveCountMax 3

Sécuriser le fichier config :

chmod 600 ~/.ssh/config

Se connecter avec un alias

Maintenant, connectez-vous simplement avec :

ssh prod

Au lieu de :

ssh ubuntu@192.168.1.100

Connexion automatique sans passphrase

Pour éviter de taper votre passphrase à chaque connexion, utilisez ssh-agent.

Démarrer ssh-agent

Il existe plusieurs méthodes pour démarrer ssh-agent :

Méthode 1 :

eval $(ssh-agent)

Ou :

eval `ssh-agent`

Méthode 2 :

exec ssh-agent bash

Cette méthode remplace votre shell actuel par un nouveau shell avec ssh-agent actif.

Ajouter votre clé à l’agent

ssh-add

Ou spécifiez la clé :

ssh-add ~/.ssh/id_ed25519

Solution pour retenir la passphrase de manière permanente

Méthode 1 : Configuration automatique dans .bashrc

Ajoutez ces lignes à votre fichier ~/.bashrc ou ~/.profile :

# Démarrage automatique de ssh-agent
if [ -z "$SSH_AUTH_SOCK" ]; then
    eval $(ssh-agent -s)
    ssh-add ~/.ssh/id_ed25519 2>/dev/null
fi

Rechargez la configuration :

source ~/.bashrc

Ou :

. ~/.bashrc

Méthode 2 : Configuration SSH automatique

Tout d’abord, assurez-vous que ssh-agent fonctionne tout le temps en ajoutant eval $(ssh-agent) au fichier .bashrc ou .profile.

Ensuite, ajoutez AddKeysToAgent yes au fichier de configuration SSH :

touch ~/.ssh/config
chmod 600 ~/.ssh/config
echo "AddKeysToAgent yes" >> ~/.ssh/config

La passphrase sera enregistrée pour la session.

Sur Windows 10/11 (sans WSL)

Windows dispose d’un service SSH-Agent natif.

Étape 1 : Activer le service (PowerShell administrateur) :

Get-Service ssh-agent | Set-Service -StartupType Automatic
Start-Service ssh-agent

Étape 2 : Ajouter votre clé :

ssh-add C:\Users\VotreNom\.ssh\id_ed25519

Avec Keychain (Linux)

Keychain est un outil pratique pour gérer ssh-agent de manière persistante et retenir la passphrase entre les redémarrages.

Installation :

sudo apt install keychain

Configuration dans ~/.bashrc ou ~/.profile :

# Démarrer keychain et charger les clés
eval $(keychain --eval --agents ssh ~/.ssh/id_ed25519)

Ou pour plusieurs clés :

eval $(keychain --eval --agents ssh ~/.ssh/id_ed25519 ~/.ssh/id_rsa ~/.ssh/cle_perso)

Recharger la configuration :

source ~/.bashrc

Ou :

. ~/.profile

Avantages de keychain :

  • Réutilise l’agent SSH existant entre les sessions
  • Demande la passphrase une seule fois après le redémarrage
  • Gère plusieurs clés facilement

Pour plus d’informations sur keychain, consultez la documentation : http://www.funtoo.org/Keychain

Gestion des clés SSH

Lister les clés chargées dans l’agent SSH

ssh-add -l

Cette commande affiche toutes les clés actuellement chargées dans ssh-agent avec leur empreinte (fingerprint).

Lister l’empreinte d’une clé spécifique

ssh-keygen -l -f ~/.ssh/id_ed25519.pub

Pour une clé privée :

ssh-keygen -l -f ~/.ssh/id_ed25519

Pour RSA :

ssh-keygen -l -f ~/.ssh/id_rsa.pub

Supprimer toutes les clés de l’agent

ssh-add -D

Supprimer une clé spécifique de l’agent

ssh-add -d ~/.ssh/id_ed25519

Changer ou supprimer la passphrase d’une clé

Pour changer la passphrase :

ssh-keygen -p -f ~/.ssh/id_ed25519

Ou simplement :

ssh-keygen -p

Pour supprimer complètement la passphrase :

Exécutez la commande ci-dessus, puis validez sans entrer de mot de passe quand on vous demande la nouvelle passphrase.

⚠️ Danger sécurité
Supprimer la passphrase réduit la sécurité. Si quelqu’un accède à votre fichier de clé privée, il pourra se connecter à vos serveurs sans restriction.

Vérifier les permissions de vos clés

Les permissions correctes sont essentielles pour la sécurité :

# Vérifier les permissions
ls -la ~/.ssh/

# Corriger les permissions si nécessaire
chmod 700 ~/.ssh
chmod 600 ~/.ssh/id_ed25519
chmod 644 ~/.ssh/id_ed25519.pub  # 644 acceptable car clé publique (lecture seule)
chmod 600 ~/.ssh/config
chmod 600 ~/.ssh/authorized_keys

ℹ️ Info La clé publique (.pub) peut être en 644 (lecture publique) car elle n’est pas sensible. Certains préfèrent 600 par principe de moindre privilège, mais 644 est parfaitement acceptable et standard.

Sécurisation de votre serveur SSH

Une fois SSH configuré, sécurisez votre serveur avec ces bonnes pratiques.

1. Éditer la configuration SSH

Éditez le fichier de configuration SSH sur le serveur :

sudo nano /etc/ssh/sshd_config

Ou avec vim :

sudo vim /etc/ssh/sshd_config

2. Désactiver l’authentification par mot de passe

Ajoutez ou modifiez ces lignes dans /etc/ssh/sshd_config :

PasswordAuthentication no
PubkeyAuthentication yes
ChallengeResponseAuthentication no
UsePAM no

3. Désactiver la connexion root

Dans le même fichier :

PermitRootLogin no
⚠️ Risque de blocage
Assurez-vous d’avoir créé un utilisateur non-root avec privilèges sudo avant de faire cela ! Sinon vous perdrez l’accès à votre serveur.

Créer un utilisateur avec sudo :

# Créer l'utilisateur
sudo adduser nom_utilisateur

# Ajouter aux sudoers
sudo usermod -aG sudo nom_utilisateur

4. Changer le port SSH par défaut

Le port 22 est constamment scanné par les bots. Changez-le :

Port 2222

N’oubliez pas de :

  1. Configurer votre pare-feu pour autoriser le nouveau port
  2. Mettre à jour votre fichier ~/.ssh/config côté client

5. Limiter les utilisateurs autorisés

Pour autoriser uniquement certains utilisateurs :

AllowUsers utilisateur1 utilisateur2

Ou pour refuser certains utilisateurs :

DenyUsers utilisateur_banni

6. Désactiver X11 Forwarding (si non utilisé)

X11Forwarding no

7. Limiter les tentatives de connexion

MaxAuthTries 3
MaxSessions 2

8. Activer la journalisation détaillée

LogLevel VERBOSE

9. Sécuriser les algorithmes cryptographiques (recommandé 2025)

Pour renforcer la sécurité contre les attaques modernes, limitez les algorithmes aux plus robustes :

# Algorithmes d'échange de clés (protection quantique incluse)
KexAlgorithms curve25519-sha256,curve25519-sha256@libssh.org,diffie-hellman-group16-sha512,diffie-hellman-group18-sha512

# Chiffrements (privilégier les clés longues)
Ciphers chacha20-poly1305@openssh.com,aes256-gcm@openssh.com,aes256-ctr

# MACs (codes d'authentification)
MACs hmac-sha2-512-etm@openssh.com,hmac-sha2-256-etm@openssh.com

ℹ️ Info Ces algorithmes représentent les standards 2025 recommandés par la communauté OpenSSH pour une sécurité maximale. Les anciens algorithmes (DSA, ECDSA faibles) sont exclus.

10. Redémarrer le service SSH

Après toute modification du fichier de configuration :

Sur les systèmes modernes (systemctl) :

sudo systemctl restart ssh

Sur les systèmes anciens (service) :

sudo service ssh restart
⚠️ Risque de blocage
Testez votre connexion SSH dans un nouveau terminal AVANT de fermer votre session actuelle pour éviter de vous bloquer définitivement !

11. Installer Fail2ban (protection contre brute-force)

Fail2ban bannit automatiquement les IP qui tentent trop de connexions échouées.

Installation :

sudo apt install fail2ban

Démarrage sur systèmes modernes :

sudo systemctl enable fail2ban
sudo systemctl start fail2ban

Démarrage sur systèmes anciens :

sudo service fail2ban start

Configuration de base :

Créez le fichier /etc/fail2ban/jail.local :

sudo nano /etc/fail2ban/jail.local

Ajoutez cette configuration :

[DEFAULT]
bantime = 86400  # 24 heures (recommandé en 2025 contre les attaques distribuées)
findtime = 600   # 10 minutes
maxretry = 3     # 3 tentatives échouées

[sshd]
enabled = true
port = 22
# Si vous avez changé le port SSH, mettez le bon numéro ici
logpath = /var/log/auth.log

Si vous utilisez un port personnalisé :

[sshd]
enabled = true
port = 2222
logpath = /var/log/auth.log
maxretry = 3
bantime = 86400  # 24 heures

Redémarrer Fail2ban :

# Systèmes modernes
sudo systemctl restart fail2ban

# Systèmes anciens
sudo service fail2ban restart

Vérifier le statut :

sudo fail2ban-client status sshd

12. Configurer le pare-feu UFW

# Installer UFW (si non installé)
sudo apt install ufw

# Autoriser SSH (port par défaut)
sudo ufw allow 22/tcp

# Ou si vous avez changé le port
sudo ufw allow 2222/tcp

# Activer le pare-feu
sudo ufw enable

# Vérifier le statut
sudo ufw status

Résolution des problèmes courants

Erreur : Permission denied (publickey)

Causes possibles :

  • La clé publique n’est pas sur le serveur
  • Mauvaises permissions sur ~/.ssh ou authorized_keys
  • Vous utilisez la mauvaise clé
  • L’authentification par clé est désactivée

Solutions :

# Vérifier les permissions côté serveur
ssh nom_utilisateur@serveur "ls -la ~/.ssh"

# Corriger les permissions
ssh nom_utilisateur@serveur "chmod 700 ~/.ssh && chmod 600 ~/.ssh/authorized_keys"

# Recopier la clé
ssh-copy-id -i ~/.ssh/id_ed25519.pub nom_utilisateur@serveur

# Vérifier quelle clé est utilisée
ssh -v nom_utilisateur@serveur

Erreur : Connection timed out

Causes possibles :

  • Pare-feu bloque la connexion
  • Mauvaise adresse IP
  • Service SSH non démarré
  • Problème réseau

Solutions :

# Vérifier que le serveur SSH écoute
sudo netstat -tlnp | grep ssh

# Ou avec ss (plus moderne)
sudo ss -tlnp | grep ssh

# Vérifier le pare-feu
sudo ufw status

# Autoriser SSH
sudo ufw allow 22/tcp

# Redémarrer SSH
sudo systemctl restart ssh  # ou sudo service ssh restart

# Tester la connectivité
ping adresse_ip_serveur

Erreur : Host key verification failed

Cela arrive quand la clé du serveur a changé (réinstallation, attaque man-in-the-middle).

Solution (si vous êtes sûr que c’est légitime) :

ssh-keygen -R adresse_ip_serveur

Ou pour un port spécifique :

ssh-keygen -R [adresse_ip_serveur]:2222

Puis supprimez manuellement la ligne concernée dans ~/.ssh/known_hosts.

Erreur : Too many authentication failures

Vous avez trop de clés chargées dans ssh-agent.

Solution :

# Supprimer toutes les clés
ssh-add -D

# Ajouter uniquement la bonne clé
ssh-add ~/.ssh/id_ed25519

# Ou spécifier la clé dans la connexion
ssh -i ~/.ssh/id_ed25519 nom_utilisateur@serveur

Problème WSL : setsockopt IPV6_TCLASS

Si vous voyez cette erreur sur WSL 1 :

setsockopt IPV6_TCLASS 8: Operation not permitted

Solution :

Ajoutez à ~/.ssh/config :

AddressFamily inet

Ou plus globalement :

echo "AddressFamily inet" >> ~/.ssh/config

ℹ️ Info Ce problème n’existe généralement pas sur WSL 2.

Connexion lente

Si la connexion SSH est lente à s’établir, désactivez la recherche DNS inversée sur le serveur.

Sur le serveur, éditez /etc/ssh/sshd_config :

sudo nano /etc/ssh/sshd_config

Ajoutez ou modifiez :

UseDNS no
GSSAPIAuthentication no

Puis redémarrez :

sudo systemctl restart ssh  # ou sudo service ssh restart

Erreur : Agent admitted failure to sign

L’agent SSH ne trouve pas votre clé.

Solution :

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

# Vérifier les clés chargées
ssh-add -l

Débogage avancé avec mode verbose

Pour voir exactement ce qui se passe lors de la connexion :

# Mode verbose
ssh -v nom_utilisateur@serveur

# Mode très verbose
ssh -vv nom_utilisateur@serveur

# Mode extrêmement verbose
ssh -vvv nom_utilisateur@serveur

Commandes SSH utiles

Transfert de fichiers

Copier un fichier vers le serveur (SCP) :

scp fichier.txt nom_utilisateur@serveur:/chemin/destination/

Copier un fichier depuis le serveur :

scp nom_utilisateur@serveur:/chemin/fichier.txt ./

Copier un dossier vers le serveur :

scp -r mon_dossier/ nom_utilisateur@serveur:/chemin/destination/

Utiliser SFTP (plus sécurisé que SCP) :

sftp nom_utilisateur@serveur

Tunnels SSH (Port Forwarding)

Tunnel local (accéder à un service distant localement) :

ssh -L 8080:localhost:80 nom_utilisateur@serveur

Maintenant, localhost:8080 sur votre machine pointe vers localhost:80 sur le serveur.

Tunnel distant (exposer un service local sur le serveur) :

ssh -R 8080:localhost:3000 nom_utilisateur@serveur

Tunnel dynamique (proxy SOCKS) :

ssh -D 1080 nom_utilisateur@serveur

Connexion SSH avec affichage graphique (X11 forwarding)

ssh -X nom_utilisateur@serveur

Ou pour une confiance complète :

ssh -Y nom_utilisateur@serveur

Exécuter une commande à distance sans ouvrir de session

ssh nom_utilisateur@serveur 'commande à exécuter'

Exemple :

ssh root@serveur 'df -h'

Maintenir la connexion active

Pour éviter les déconnexions automatiques, ajoutez à ~/.ssh/config :

Host *
    ServerAliveInterval 60
    ServerAliveCountMax 3

Connexion en arrière-plan (sans terminal)

ssh -f nom_utilisateur@serveur 'commande'

Compression des données

Pour les connexions lentes :

ssh -C nom_utilisateur@serveur

Récapitulatif des commandes essentielles

# Générer une clé Ed25519
ssh-keygen -t ed25519 -C "votre.email@example.com"

# Copier la clé sur le serveur
ssh-copy-id -i ~/.ssh/id_ed25519.pub nom_utilisateur@serveur

# Se connecter
ssh nom_utilisateur@serveur

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

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

# Vérifier l'empreinte d'une clé
ssh-keygen -l -f ~/.ssh/id_ed25519.pub

# Changer/supprimer la passphrase
ssh-keygen -p -f ~/.ssh/id_ed25519

# Redémarrer SSH (systèmes modernes)
sudo systemctl restart ssh

# Redémarrer SSH (systèmes anciens)
sudo service ssh restart

Conclusion

Vous savez maintenant comment configurer SSH de manière complète et sécurisée sur votre serveur VPS. Les points clés à retenir :

✅ Utilisez Ed25519 pour vos nouvelles clés SSH (plus rapide et sécurisé que RSA)

✅ Configurez l’authentification par clés plutôt que par mot de passe

✅ Utilisez le fichier ~/.ssh/config pour simplifier vos connexions

✅ Utilisez ssh-agent ou keychain pour éviter de retaper votre passphrase

✅ Sécurisez votre serveur en désactivant l’authentification par mot de passe et la connexion root

✅ Installez Fail2ban pour protéger contre les attaques brute-force

✅ Changez le port SSH par défaut (22) pour réduire les attaques automatisées

✅ Utilisez systemctl sur les systèmes modernes et service sur les anciens

Pour aller plus loin, consultez la documentation officielle OpenSSH et les guides de sécurisation de votre distribution Linux.

Mots-clés : SSH, connexion serveur VPS, clé SSH, authentification SSH, sécurité serveur Linux, OpenSSH, tutorial SSH, configuration SSH, ssh-keygen, serveur distant, Ed25519, Fail2ban, systemctl, service ssh.

Catégories

Commentaires

Articles connexes

Coming soon
Coming soon