Nicolas Le Borgne

Développeur

Le fichier ~/.ssh/config

Le 27 juin 2021

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 taper ssh <Host>
  • Hostname : le nom de la cible
  • User : 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

Sources

© 2021 Nicolas Le Borgne