Connexion distante, transfert de fichiers, tunneling et gestion des clés SSH.
Sujets associés : SSH
ssh — connexion distante
# Connexion basique
ssh utilisateur@192.168.1.50
ssh utilisateur@hostname.exemple.com
# Connexion sur un port non standard
ssh -p 2222 utilisateur@192.168.1.50
# Avec une clé privée spécifique
ssh -i ~/.ssh/ma-cle.pem utilisateur@192.168.1.50
# Mode verbeux (débogage de connexion)
ssh -v utilisateur@serveur # verbosité 1
ssh -vv utilisateur@serveur # verbosité 2
ssh -vvv utilisateur@serveur # verbosité maximale
# Exécuter une commande distante sans session interactive
ssh utilisateur@serveur "ls -la /var/log"
ssh utilisateur@serveur "df -h; free -h; uptime"
# Exécuter un script local sur le serveur distant
ssh utilisateur@serveur 'bash -s' < script_local.sh
# Connexion avec agent SSH (forwarding d'agent)
ssh -A utilisateur@bastion # puis depuis bastion → serveur_internessh-keygen — gestion des clés
# Générer une paire de clés ED25519 (recommandé)
ssh-keygen -t ed25519 -C "commentaire@exemple.com"
# Générer une paire RSA 4096 bits
ssh-keygen -t rsa -b 4096 -C "commentaire@exemple.com"
# Spécifier l'emplacement de la clé
ssh-keygen -t ed25519 -f ~/.ssh/ma-cle -C "production"
# Changer la passphrase d'une clé existante
ssh-keygen -p -f ~/.ssh/id_ed25519
# Afficher l'empreinte (fingerprint) d'une clé
ssh-keygen -lf ~/.ssh/id_ed25519
ssh-keygen -lf ~/.ssh/id_ed25519.pub
# Afficher la clé publique
cat ~/.ssh/id_ed25519.pub
# Récupérer la clé publique depuis une clé privée
ssh-keygen -y -f ~/.ssh/id_ed25519
# Convertir un format de clé (OpenSSH ↔ PEM)
ssh-keygen -p -m PEM -f ~/.ssh/id_rsassh-copy-id — déployer la clé publique
# Copier la clé publique par défaut sur un serveur
ssh-copy-id utilisateur@serveur
# Spécifier la clé à copier
ssh-copy-id -i ~/.ssh/ma-cle.pub utilisateur@serveur
# Sur un port non standard
ssh-copy-id -p 2222 -i ~/.ssh/ma-cle.pub utilisateur@serveur
# Équivalent manuel (si ssh-copy-id non disponible)
cat ~/.ssh/id_ed25519.pub | ssh utilisateur@serveur \
"mkdir -p ~/.ssh && cat >> ~/.ssh/authorized_keys && chmod 600 ~/.ssh/authorized_keys"Tunneling SSH
Port forwarding local (L)
Redirige un port local vers un service distant via le serveur SSH.
# Accéder à une BDD distante (3306) via localhost:3307
ssh -L 3307:localhost:3306 utilisateur@bastion
# Accéder à un service interne via un bastion
ssh -L 8080:service-interne:80 utilisateur@bastion
# → naviguer sur http://localhost:8080 accède à service-interne:80
# Rendre le tunnel persistant (pas de session interactive)
ssh -N -L 3307:db-interne:3306 utilisateur@bastion
# En arrière-plan
ssh -f -N -L 3307:db-interne:3306 utilisateur@bastionPort forwarding distant (R)
Expose un service local sur le serveur distant.
# Exposer localhost:8080 sur serveur:9090
ssh -R 9090:localhost:8080 utilisateur@serveur
# → depuis le serveur, curl localhost:9090 atteint ta machine locale
# Exposer le port 22 local sur le bastion (remote access)
ssh -R 2222:localhost:22 utilisateur@bastion
# → depuis bastion : ssh -p 2222 localhostDynamic proxy SOCKS5 (D)
Crée un proxy SOCKS5 local qui achemine tout le trafic via SSH.
# Créer un proxy SOCKS5 sur le port 1080 local
ssh -D 1080 utilisateur@serveur
# En arrière-plan, sans session
ssh -f -N -D 1080 utilisateur@serveur
# Utiliser ce proxy avec curl
curl --socks5 localhost:1080 https://exemple.com
# Configurer le navigateur pour utiliser localhost:1080 comme proxy SOCKS5~/.ssh/config — fichier de configuration
Évite de taper les options longues à chaque connexion.
# ~/.ssh/config
# Alias simple
Host prod
HostName 192.168.1.50
User deployer
IdentityFile ~/.ssh/prod-key
Port 2222
# Bastion / Jump Host
Host bastion
HostName bastion.exemple.com
User admin
IdentityFile ~/.ssh/bastion-key
Host serveur-interne
HostName 10.0.0.5
User ubuntu
ProxyJump bastion # passe par bastion automatiquement
# Config globale
Host *
ServerAliveInterval 60 # keepalive toutes les 60s
ServerAliveCountMax 3 # 3 échecs → déconnexion
AddKeysToAgent yes
IdentityFile ~/.ssh/id_ed25519
# Utiliser les alias
ssh prod
ssh serveur-interne # passe automatiquement par le bastionscp et rsync — transfert de fichiers
# scp : copier un fichier local → distant
scp fichier.txt utilisateur@serveur:/home/utilisateur/
# scp : copier un dossier (récursif)
scp -r dossier/ utilisateur@serveur:/tmp/
# scp : copier distant → local
scp utilisateur@serveur:/var/log/app.log ./
# scp sur port non standard
scp -P 2222 fichier.txt utilisateur@serveur:/tmp/
# scp avec clé spécifique
scp -i ~/.ssh/ma-cle.pem fichier.txt utilisateur@serveur:/tmp/
# rsync : synchronisation (plus efficace que scp pour les gros transferts)
rsync -avz dossier/ utilisateur@serveur:/chemin/distant/
# │││
# ││└─ compresser pendant le transfert
# │└── verbeux
# └─── mode archive (récursif + permissions + timestamps)
# rsync avec suppression des fichiers absents de la source
rsync -avz --delete dossier/ utilisateur@serveur:/chemin/distant/
# rsync via un port SSH non standard
rsync -avz -e "ssh -p 2222" dossier/ utilisateur@serveur:/chemin/
# rsync en dry-run (voir ce qui serait transféré)
rsync -avzn dossier/ utilisateur@serveur:/chemin/distant/ssh-agent — gestion des clés en mémoire
# Démarrer l'agent
eval "$(ssh-agent -s)"
# Ajouter une clé à l'agent
ssh-add ~/.ssh/id_ed25519
# Ajouter une clé pour une durée limitée (1h)
ssh-add -t 3600 ~/.ssh/id_ed25519
# Lister les clés chargées
ssh-add -l
# Supprimer une clé de l'agent
ssh-add -d ~/.ssh/id_ed25519
# Supprimer toutes les clés
ssh-add -DGestion du serveur SSH (sshd)
# Statut du service
systemctl status sshd
# Redémarrer SSH (après modification de config)
sudo systemctl restart sshd
# Vérifier la config avant de redémarrer
sudo sshd -t
# Fichier de configuration
sudo nano /etc/ssh/sshd_config
# Options importantes dans sshd_config :
# Port 22 ← changer pour réduire les scans
# PermitRootLogin no ← désactiver le login root
# PasswordAuthentication no ← forcer les clés SSH
# PubkeyAuthentication yes
# AllowUsers alice bob ← liste blanche d'utilisateurs
# MaxAuthTries 3
# ClientAliveInterval 300
# Voir les connexions SSH en cours
ss -tnp | grep :22
who
w
last | head -20 # historique des connexionsEn relation avec
- Linux Réseau — Vue d’ensemble — index des commandes réseau Linux
- SSH — fonctionnement du protocole, clés, multiplexage
- Ports et Sockets — vérifier que le port 22 est ouvert
- Firewall et iptables — autoriser SSH dans le pare-feu
- TLS et Certificats — Commandes — clés RSA/ECDSA (similitudes avec SSH)