Skip to Content
CLI🔑 SSH

🔑 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@hostname

Exé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.sh

Clé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_cle

Gé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.pub

Agent 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 -D

Configuration 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_bastion

Après configuration, connectez-vous simplement avec :

ssh prod ssh dev

Tunnels 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@hostname

Port 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@hostname

SOCKS proxy dynamique

# Créer un proxy SOCKS sur le port 1080 ssh -D 1080 user@hostname # En arrière-plan ssh -fND 1080 user@hostname

Transfert 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 - quitter

Sé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_keys

Fichier 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@host

Bonnes 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 sshd

Dépannage

Problèmes courants

# 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@hostname

Debug 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