Credit : Illustration backtotheweb.fr
SSH Config : simplifier ses connexions avec ~/.ssh/config
Fini les commandes a rallonge
On a tous galéré avec ça au moins une fois.
Sans fichier de configuration, chaque connexion SSH ressemble a cela :
ssh -i ~/.ssh/id_ed25519_ionos -p 2222 deploy@203.0.113.50
Avec un fichier ~/.ssh/config, cela devient :
ssh prod
Creer le fichier de configuration
mkdir -p ~/.ssh && chmod 700 ~/.ssh
touch ~/.ssh/config && chmod 600 ~/.ssh/config
Syntaxe de base
Editez ~/.ssh/config :
# Serveur de production IONOS
Host prod
HostName 203.0.113.50
User deploy
Port 2222
IdentityFile ~/.ssh/id_ed25519_ionos
# Serveur de staging
Host staging
HostName 203.0.113.51
User deploy
Port 2222
IdentityFile ~/.ssh/id_ed25519_ionos
# Serveur de base de donnees (acces interne uniquement)
Host db
HostName 10.0.1.100
User dbadmin
IdentityFile ~/.ssh/id_ed25519_db
Desormais, ssh prod se connecte directement avec tous les bons parametres.
Wildcards et options globales
Appliquez des options a plusieurs hotes :
# Options par defaut pour tous les serveurs IONOS
Host ionos-*
User deploy
Port 2222
IdentityFile ~/.ssh/id_ed25519_ionos
ServerAliveInterval 60
ServerAliveCountMax 3
Host ionos-prod
HostName 203.0.113.50
Host ionos-staging
HostName 203.0.113.51
Host ionos-dev
HostName 203.0.113.52
# Options globales (appliquees a tous les hotes)
Host *
AddKeysToAgent yes
IdentitiesOnly yes
Compression yes
ProxyJump : rebondir via un bastion
Pour atteindre un serveur dans un reseau prive, passez par un serveur bastion :
Host bastion
HostName 203.0.113.50
User admin
Port 22
IdentityFile ~/.ssh/id_ed25519_bastion
Host db-interne
HostName 10.0.1.100
User dbadmin
ProxyJump bastion
IdentityFile ~/.ssh/id_ed25519_db
Host app-interne
HostName 10.0.1.200
User deploy
ProxyJump bastion
ssh db-interne se connecte automatiquement au bastion puis rebondit vers le serveur de base de donnees. C'est l'equivalent de l'ancienne syntaxe ProxyCommand ssh -W %h:%p bastion.
Pour un double rebond :
Host deep-server
HostName 192.168.1.10
User admin
ProxyJump bastion,app-interne
IdentityFile : une cle par projet
Utilisez des cles differentes pour chaque contexte :
# Generer des cles dediees
ssh-keygen -t ed25519 -C "prod-ionos" -f ~/.ssh/id_ed25519_ionos
ssh-keygen -t ed25519 -C "github" -f ~/.ssh/id_ed25519_github
ssh-keygen -t ed25519 -C "db-admin" -f ~/.ssh/id_ed25519_db
Host github.com
HostName github.com
User git
IdentityFile ~/.ssh/id_ed25519_github
IdentitiesOnly yes
L'option IdentitiesOnly yes empeche SSH d'essayer toutes les cles et n'utilise que celle specifiee.
Multiplexing : reutiliser les connexions
Le multiplexing garde la connexion SSH ouverte et la reutilise pour les sessions suivantes. La premiere connexion prend quelques secondes ; les suivantes sont instantanees :
Host *
ControlMaster auto
ControlPath ~/.ssh/sockets/%r@%h-%p
ControlPersist 600
Creez le repertoire pour les sockets :
mkdir -p ~/.ssh/sockets
ControlMaster auto: active le multiplexing automatiquementControlPath: chemin du socket Unix partageControlPersist 600: garde la connexion ouverte 10 minutes apres deconnexion
Verifiez les connexions actives :
ssh -O check prod
# Master running (pid=12345)
# Fermer manuellement une connexion partagee
ssh -O exit prod
Tunnel SSH et port forwarding
Definissez des tunnels dans la configuration :
Host tunnel-db
HostName 203.0.113.50
User deploy
LocalForward 3307 10.0.1.100:3306
RequestTTY no
ExitOnForwardFailure yes
Lancez le tunnel avec ssh -N tunnel-db, puis connectez-vous a MySQL en local sur le port 3307.
Bonnes pratiques
- Utilisez toujours des cles Ed25519 (plus securisees et rapides que RSA)
- Protegez vos cles avec une passphrase et utilisez
ssh-agent - Mettez
chmod 600sur le fichier config etchmod 700sur le repertoire.ssh - Documentez chaque bloc
Hostavec un commentaire
Le fichier ~/.ssh/config est un gain de productivite enorme quand vous gerez plusieurs serveurs IONOS au quotidien.
Si vous avez des questions, n'hésitez pas à nous écrire. On répond à tout le monde.