🔑 SSH
Commandes essentielles pour la gestion des connexions sécurisées, clés et tunnels SSH.
SSH (Secure Shell) permet de se connecter à des serveurs distants de manière sécurisée et d’exécuter des commandes à distance.
Connexion de base
Se connecter à un serveur
# Connexion simple
ssh user@hostname
# Connexion avec un port spécifique
ssh -p 2222 user@hostname
# Connexion avec une clé spécifique
ssh -i ~/.ssh/ma_cle user@hostname
# Connexion en mode verbose (debug)
ssh -v user@hostname
# Mode très verbose
ssh -vvv user@hostnameExécuter une commande à distance
# Exécuter une commande et se déconnecter
ssh user@hostname "ls -la"
# Exécuter plusieurs commandes
ssh user@hostname "cd /var/www && git pull"
# Exécuter un script local sur le serveur distant
ssh user@hostname 'bash -s' < script_local.shClés SSH
Générer une clé SSH
# Générer une clé Ed25519 (recommandé)
ssh-keygen -t ed25519 -C "mon@email.com"
# Générer une clé RSA 4096 bits
ssh-keygen -t rsa -b 4096 -C "mon@email.com"
# Générer une clé avec un nom personnalisé
ssh-keygen -t ed25519 -f ~/.ssh/ma_cle_perso -C "mon@email.com"
# Générer une clé sans passphrase (non recommandé en prod)
ssh-keygen -t ed25519 -N "" -f ~/.ssh/ma_cleGérer les clés
# Copier la clé publique sur un serveur
ssh-copy-id user@hostname
# Copier une clé spécifique
ssh-copy-id -i ~/.ssh/ma_cle.pub user@hostname
# Afficher la clé publique
cat ~/.ssh/id_ed25519.pub
# Changer la passphrase d'une clé
ssh-keygen -p -f ~/.ssh/id_ed25519
# Afficher l'empreinte d'une clé
ssh-keygen -lf ~/.ssh/id_ed25519.pubAgent SSH
# Démarrer l'agent SSH
eval "$(ssh-agent -s)"
# Ajouter une clé à l'agent
ssh-add ~/.ssh/id_ed25519
# Ajouter une clé avec expiration (1 heure)
ssh-add -t 3600 ~/.ssh/id_ed25519
# Lister les clés dans l'agent
ssh-add -l
# Supprimer toutes les clés de l'agent
ssh-add -DConfiguration SSH
Fichier ~/.ssh/config
Le fichier ~/.ssh/config permet de définir des alias et configurations pour vos connexions SSH.
# ~/.ssh/config
# Serveur de production
Host prod
HostName 192.168.1.100
User deploy
Port 22
IdentityFile ~/.ssh/id_prod
# Serveur de développement
Host dev
HostName dev.example.com
User developer
Port 2222
IdentityFile ~/.ssh/id_dev
# Configuration globale
Host *
AddKeysToAgent yes
IdentitiesOnly yes
ServerAliveInterval 60
ServerAliveCountMax 3
# Connexion via un jump host (bastion)
Host serveur-interne
HostName 10.0.0.50
User admin
ProxyJump bastion
Host bastion
HostName bastion.example.com
User jumpuser
IdentityFile ~/.ssh/id_bastionAprès configuration, connectez-vous simplement avec :
ssh prod
ssh devTunnels SSH
Port forwarding local
Le port forwarding local permet d’accéder à un service distant via un port local.
# Rediriger le port local 8080 vers le port 80 du serveur distant
ssh -L 8080:localhost:80 user@hostname
# Accéder à un service interne via le serveur SSH
ssh -L 3306:db-server:3306 user@bastion
# Tunnel en arrière-plan
ssh -fNL 8080:localhost:80 user@hostnamePort forwarding distant (reverse)
# Exposer le port local 3000 sur le port 8080 du serveur distant
ssh -R 8080:localhost:3000 user@hostname
# Tunnel reverse en arrière-plan
ssh -fNR 8080:localhost:3000 user@hostnameSOCKS proxy dynamique
# Créer un proxy SOCKS sur le port 1080
ssh -D 1080 user@hostname
# En arrière-plan
ssh -fND 1080 user@hostnameTransfert de fichiers
SCP (Secure Copy)
# Copier un fichier vers le serveur
scp fichier.txt user@hostname:/path/destination/
# Copier un fichier depuis le serveur
scp user@hostname:/path/fichier.txt ./
# Copier un dossier récursivement
scp -r mon_dossier/ user@hostname:/path/destination/
# Copier avec un port spécifique
scp -P 2222 fichier.txt user@hostname:/path/
# Préserver les permissions et timestamps
scp -p fichier.txt user@hostname:/path/SFTP
# Ouvrir une session SFTP
sftp user@hostname
# Commandes SFTP courantes
# ls, cd, pwd - navigation distante
# lls, lcd, lpwd - navigation locale
# get fichier - télécharger
# put fichier - uploader
# mkdir, rmdir, rm - gestion fichiers
# exit - quitterSécurité
Permissions des fichiers SSH
# Permissions recommandées
chmod 700 ~/.ssh
chmod 600 ~/.ssh/id_ed25519
chmod 644 ~/.ssh/id_ed25519.pub
chmod 600 ~/.ssh/config
chmod 600 ~/.ssh/authorized_keysFichier authorized_keys
# Ajouter une clé autorisée
cat ma_cle.pub >> ~/.ssh/authorized_keys
# Restreindre une clé à certaines commandes
# Dans authorized_keys :
command="/usr/bin/rsync",no-pty,no-agent-forwarding ssh-ed25519 AAAA... user@hostBonnes pratiques serveur
Toujours tester la nouvelle config SSH avant de fermer la session active !
# /etc/ssh/sshd_config - Options recommandées
# Désactiver l'authentification par mot de passe
PasswordAuthentication no
# Désactiver root login
PermitRootLogin no
# Utiliser uniquement le protocole 2
Protocol 2
# Limiter les utilisateurs autorisés
AllowUsers deploy admin
# Changer le port par défaut (optionnel)
Port 2222
# Après modification, tester et redémarrer
sudo sshd -t
sudo systemctl restart sshdDépannage
Problèmes courants
Permission denied
# Vérifier les permissions
ls -la ~/.ssh/
# Corriger les permissions
chmod 700 ~/.ssh
chmod 600 ~/.ssh/id_*
chmod 644 ~/.ssh/*.pub
# Vérifier que la clé est dans authorized_keys sur le serveur
ssh -v user@hostnameDebug détaillé
# Activer le mode verbose
ssh -v user@hostname # verbose
ssh -vv user@hostname # plus verbose
ssh -vvv user@hostname # maximum verbose
# Vérifier les logs serveur
sudo tail -f /var/log/auth.log # Debian/Ubuntu
sudo tail -f /var/log/secure # CentOS/RHEL