Connexion
Connexion de base
ssh user@host # connect to host ssh -p 2222 user@host # custom port ssh user@host command # run remote command ssh -t user@host "top" # force TTY allocation
Options de connexion
-p portSe connecter à un port spécifique
-i keyUtiliser une clé privée spécifique
-tForcer l'allocation d'un pseudo-terminal
-v / -vv / -vvvDébogage verbeux (détail croissant)
-qMode silencieux (supprimer les avertissements)
-NAucune commande distante (pour les tunnels)
-fPasser en arrière-plan avant la commande
-J jumpHôte de rebond (ProxyJump)
Gestion des clés
Générer des clés
ssh-keygen -t ed25519 -C "[email protected]" ssh-keygen -t rsa -b 4096 -C "[email protected]" ssh-keygen -t ed25519 -f ~/.ssh/mykey ssh-keygen -p -f ~/.ssh/id_ed25519 # change passphrase
Déployer la clé publique
ssh-copy-id user@host ssh-copy-id -i ~/.ssh/mykey.pub user@host # Manual: append .pub to remote authorized_keys cat ~/.ssh/id_ed25519.pub | ssh user@host \ "mkdir -p ~/.ssh && cat >> ~/.ssh/authorized_keys"
Fichiers de clés
~/.ssh/id_ed25519Clé privée (garder secrète)
~/.ssh/id_ed25519.pubClé publique (partager librement)
~/.ssh/authorized_keysDistant : clés publiques acceptées
~/.ssh/known_hostsEmpreintes des hôtes connus
Fichier de configuration
Bases de ~/.ssh/config
Host myserver HostName 192.168.1.100 User deploy Port 2222 IdentityFile ~/.ssh/deploy_key # Then connect with just: # ssh myserver
Options de configuration utiles
Host * ServerAliveInterval 60 ServerAliveCountMax 3 AddKeysToAgent yes IdentitiesOnly yes Host bastion HostName bastion.example.com User admin
Directives de configuration
HostModèle d'alias pour l'entrée
HostNameNom d'hôte ou IP réel
UserNom d'utilisateur de connexion
PortPort distant (défaut 22)
IdentityFileChemin vers la clé privée
ProxyJumpRebondir via un autre hôte
ServerAliveIntervalIntervalle keep-alive (secondes)
IdentitiesOnlyUtiliser uniquement les clés spécifiées
Redirection de port
Redirection locale (-L)
# Access remote port 5432 via local port 5432 ssh -L 5432:localhost:5432 user@host # Access remote-db:3306 through ssh host ssh -L 3306:remote-db:3306 user@host # Bind to all interfaces ssh -L 0.0.0.0:8080:localhost:80 user@host
Redirection distante (-R)
# Expose local port 3000 on remote port 8080 ssh -R 8080:localhost:3000 user@host # Allow remote connections from any interface ssh -R 0.0.0.0:8080:localhost:3000 user@host
Redirection dynamique (-D)
# SOCKS5 proxy on local port 1080 ssh -D 1080 user@host # Background SOCKS proxy ssh -D 1080 -fN user@host
SCP & SFTP
SCP (Copie sécurisée)
scp file.txt user@host:/remote/path/ scp user@host:/remote/file.txt ./local/ scp -r dir/ user@host:/remote/path/ scp -P 2222 file.txt user@host:/path/
SFTP (Transfert interactif)
sftp user@host # Inside sftp session: # put local.txt — upload file # get remote.txt — download file # ls / lcd / cd — list / change directory
Options de transfert
-rRécursif (copier des répertoires)
-P portSpécifier le port (SCP utilise -P, pas -p)
-CActiver la compression
-l limitLimiter la bande passante en Kbit/s
-i keyUtiliser un fichier d'identité spécifique
Transmission d'agent
SSH Agent
eval "$(ssh-agent -s)" # start agent ssh-add ~/.ssh/id_ed25519 # add key to agent ssh-add -l # list loaded keys ssh-add -D # remove all keys
Transmettre l'agent
ssh -A user@host # forward agent # Or in ~/.ssh/config: # Host myserver # ForwardAgent yes
Notes sur l'agent
Agent forwarding lets the remote host use your local keys without copying them. Use only with trusted hosts. Prefer ProxyJump over agent forwarding when possible.
Tunnels
Tunnel persistant
# Background tunnel that stays open ssh -fNT -L 5432:localhost:5432 user@host # Auto-reconnecting tunnel (with autossh) autossh -M 0 -fNT -L 5432:localhost:5432 user@host
Hôtes de rebond / Bastion
ssh -J bastion user@internal-host ssh -J user1@hop1,user2@hop2 user@target # Config equivalent: # Host internal # HostName 10.0.0.5 # ProxyJump bastion
Gestion des tunnels
-fArrière-plan après authentification
-NAucune commande distante
-TDésactiver le pseudo-terminal
~.Tuer une session SSH bloquée (séquence d'échappement)
~COuvrir la ligne de commande pour la redirection
~#Lister les connexions redirigées
Dépannage
Déboguer la connexion
ssh -vvv user@host # max verbosity ssh -G user@host # dump config (dry run) ssh-keyscan host # fetch host keys ssh-keygen -R host # remove from known_hosts
Problèmes courants
Permission deniedMauvaise clé, utilisateur, ou permissions ~/.ssh (700/600)
Host key changedssh-keygen -R host, puis se reconnecter
Connection timed outVérifier le pare-feu, le port, l'accessibilité de l'hôte
Too many auth failuresUtiliser -i pour spécifier la clé ou IdentitiesOnly
Broken pipeAjouter ServerAliveInterval à la configuration
Permissions des fichiers
chmod 700 ~/.ssh chmod 600 ~/.ssh/id_ed25519 # private key chmod 644 ~/.ssh/id_ed25519.pub # public key chmod 600 ~/.ssh/authorized_keys chmod 644 ~/.ssh/known_hosts
Bonnes pratiques de sécurité
Durcissement du serveur
PasswordAuthentication noDésactiver la connexion par mot de passe
PermitRootLogin noDésactiver l'accès SSH en tant que root
AllowUsers deployListe blanche des utilisateurs autorisés
Port 2222Port non standard (éviter les scanners)
MaxAuthTries 3Limiter les tentatives d'authentification
Bonnes pratiques pour les clés
Prefer Ed25519 keys (smaller, faster, more secure). Always set a passphrase on private keys. Use ssh-agent to avoid retyping passphrases. Rotate keys periodically; revoke unused keys. Use IdentitiesOnly to control which key is offered.
Multiplexage
Partage de connexion
# In ~/.ssh/config Host * ControlMaster auto ControlPath ~/.ssh/sockets/%r@%h-%p ControlPersist 600 # Create socket directory mkdir -p ~/.ssh/sockets
Avantages du multiplexage
Reuses a single TCP connection for multiple SSH sessions to the same host. Eliminates repeated handshakes — faster connects and lower overhead. ControlPersist keeps the master alive (seconds).
Séquences d'échappement
Commandes d'échappement SSH
~.Terminer la connexion (tuer une session bloquée)
~^ZSuspendre la session SSH
~COuvrir la ligne de commande (ajouter une redirection)
~#Lister les connexions redirigées
~&Mettre SSH en arrière-plan (en attente de connexions)
~?Afficher l'aide des séquences d'échappement
~~Envoyer un tilde littéral