Le fichier ~/.ssh/config
Si vous avez à vous connecter sur beaucoup de machines distantes, que votre entreprise applique des pratiques comme ne pas utiliser le port 22
pour ssh ou autres, les commandes ssh
peuvent être fastidieuses à taper. Évidemment, on a le ctrl+r
pour fouiller dans l'historique, mais quand la commande n'est plus dans l'historique, on est perdu 😅.
Le fichier ~/.ssh/config
va permettre de tenir un annuaire des machines.
Le principe de base
# `~/.ssh/config`
Host app.test
HostName app.domain.com
User michel
On définit plusieurs choses :
Host
: c'est votre raccourci, il vous suffira de taperssh <Host>
Hostname
: le nom de la cibleUser
: votre username sur la cible
Autrement dit, si vous tapiez ssh michel@app.domain.com
vous taperez désormais ssh app.test
. Vous pouvez ainsi définir une nomenclature qui vous permettra de vous y retrouver en toute logique.
Les wildcards
Pour les paramètres communs à plusieurs hôtes, vous pouvez utiliser des wildcards. Exemple si vous utilisez le même nom d'utilisateur partout :
# `~/.ssh/config`
Host *
User michel
Host app.test
HostName app.domain.com
Les ports
Afin de spécifier un port ssh
spécifique :
# `~/.ssh/config`
Host app.test
HostName app.domain.com
User michel
Port 49876
Se rendre directement dans un dossier spécifique
Si vous avez plusieurs applications ou environnements sur un même serveur, il peut être intéressant de se connecter directement dans un dossier spécifique :
# `~/.ssh/config`
Host *
User michel
Host app.test
HostName app.domain.com
RequestTTY true
RemoteCommand source ~/.profile; cd /usr/local/vendor/app.test; bash -li
Host app.demo
HostName app.domain.com
RequestTTY true
RemoteCommand source ~/.profile; cd /usr/local/vendor/app.demo; bash -li
Ici, la combinaison de RemoteTTY
et RemoteCommand
va nous permettre de changer de répertoire à la connexion puis de se connecter dans un terminal interactif.
Découper votre fichier
Si vous intervenez sur un gros nombre de machines, il peut être intéressant de décomposer tout cela dans plusieurs fichiers, pourquoi pas par projet :
# `~/.ssh/config`
Include ~/.ssh/conf.d/*
# `~/.ssh/conf.d/app`
Host app.test
HostName app.domain.com
User michel
Ainsi on obtient une configuration plus maintenable 🙂
Et c'est pas tout et c'est pas tout ...
Il y a tout un tas d'autres propriétés qui peuvent vous intéresser, pour voir la liste exhaustive :
man ssh_config