sshrc, utiliser vos fichiers de configuration dans des sessions SSH

sshrc apporte une réponse à 2 problématiques :

  • Vous souhaitez pouvoir utiliser votre configuration locale aux petits oignons (alias, fonctions, variables d’environnement, bashrc, vimrc, inputrc, screenrc, etc.) lorsque vous êtes connectés sur les pc/serveurs que vous administrez. Cependant vous désirez ne pas toucher aux fichiers de configuration de ces pc/serveurs car vous ne pouvez pas (contexte professionnel) ou vous ne voulez pas. De plus plusieurs personnes se connectent au(x) même(s) compte(s), il faut respecter l’usage de chacun et ne pas imposer vos fichiers de configuration aux autres
  • Au contraire vous avez décidé d’utiliser vos fichiers de configuration (aussi appelés dotfiles) mais passer sur X pc/serveurs pour modifier un de vos fichiers de configuration ça vous gonfle et vous trouvez la gestion de configuration (Ansible, Puppet, Git + liens symboliques…) trop lourde pour si peu

Alors sshrc est fait pour vous. Sur votre poste vous allez créer un fichier ~/.sshrc dans lequel vous allez exporter/sourcer votre configuration personnalisée et un dossier ~./sshrc.d où vous allez placer vos fichiers de configuration (.bashrc, .vimrc, .inputrc, etc.). Au lieu de vous connecter sur ces pc/serveurs avec la commande ssh, vous allez vous connecter avec la commande sshrc (no stress c’est propre). Un dossier /tmp/.cascador.sshrc.XXXX unique (XXXX généré aléatoirement) sera créé sur l’hôte distant, votre configuration personnalisée sera envoyée dedans (avec openssl) puis chargée. A la déconnexion ce dossier sera supprimé.

sshrc est un script shell sous licence MIT aisément maintenable, compréhensible et lisible. Il nécessite comme prérequis openssl sur l’hôte local et distant. Il existe également moshrc pour Mosh. Voici le code source.

Prise en main

On ne s’embête pas avec Git, on se contente de copier sshrc et le placer dans /usr/local/bin.

Voici mon fichier ~/.sshrc actuel. Dans le dossier ~/.sshrc.d j’ai mes .bashrc, .inputrc, .vimrc.

On se connecte ensuite à un serveur comme ceci sshrc root@blog-libre.org. Pour retrouver le répertoire sshrc echo $SSHHOME et s’y déplacer cd $SSHHOME; ls -a.

Je vous invite à taper « dotfile sshrc » dans votre moteur de recherche préféré pour avoir d’autres exemples : 1, 2, 3, 4, 5.

Deux points négatifs

Il n’est pas possible d’envoyer plus de 64 Ko de fichiers de configuration compressés avec sshrc. Première réaction la peur puis après quelques tests, j’arrive à passer 1 Mo sans problème, le mot important à retenir : compressés. Cependant ça reste un problème important pour certains, on peut citer les plugins Vim par exemple. Dans ce cas l’auteur conseille de copier les fichiers dans un obscur dossier sur le serveur et d’utiliser sshrc pour automatiquement sourcer ces configurations au login.

On a vu que sshrc était bien conçu et propre, il crée un dossier /tmp/.cascador.sshrc.XXXX unique qu’il supprime à la déconnexion. Cependant pour certains cas, vous serez obligés de « sortir » de ce dossier. Pour nano il n’est pas possible d’exporter un fichier de configuration, il lit seulement /etc/nanorc et ~/.nanorc, il ne possède pas d’option permettant de préciser où se situe (ailleurs) nanorc. On est donc obligé d’aller placer .nanorc dans ~/. Certains font une copie, d’autres créent un lien symbolique, c’est plus propre. Il faut gérer la suppression de ce fichier (on peut modifier trap \"rm -rf \$SSHRCCLEANUP; exit\" 0 entre autres solutions) mais si une autre personne se connecte sous le même compte que vous, il va charger ce fichier de configuration… et puis vous touchez aux fichiers de configuration du pc/serveur (/root/.nanorc pourrait déjà exister par exemple).

Quelques conseils

N’oubliez pas que les fichiers de configuration de votre pc sont probablement différents de ceux de vos serveurs. Typiquement je suis sur Xubuntu et j’administre des serveurs Debian, les versions des paquets sont différentes, les fichiers de configuration également. Je vous invite à copier les fichiers de configuration à partir de vos serveurs dans ~/.sshrc.d puis les modifier.

N’hésitez pas à abuser de if [ "$(hostname)" == "jessie1" ]; then source ${SSHHOME}/.sshrc.d/.bashrc_jessie1 ; fi afin de gérer finement vos dotfiles par serveur.

Vous pouvez créer des liens symboliques au lieu de copier certains fichiers de configuration dans ~/.sshrc.d. Personnellement j’ai fait ln -s ~/.inputrc ~/.sshrc.d/.inputrc pour inputrc. Ça me permet ainsi d’avoir mes raccourcis claviers personnalisés en fonction du poste sur lequel je suis (touches utilisées différentes si je suis sur mon pc portable).

Je vous invite à lire ce fil sur Hacker News autour de sshrc, il y a des réflexions intéressantes. Je me demande notamment dans quelle mesure on peut charger des fichiers de configuration (rendus disponibles par un serveur web) avec wget/curl. A noter le reddit dotfiles, the unofficial guide to doing dotfiles on GitHub, awesome-shell et tant qu’à faire awesome.

Aucun avis pertinent dans sshrc, utiliser vos fichiers de configuration dans des sessions SSH

Laisser un commentaire

indique des champs obligatoire.