Ho, excellent, un équivalent du hook preexec de zsh pour bash qui permet donc de lancer une commande avant d'exécuter celle demandée par l'utilisateur. Évidemment, il s'agit d'un hack. :)
Un cas d'usage ? Avant l'exécution d'une commande ssh/scp/..., vérifier si l'agent ssh a encore la passphrase en mémoire, sinon la redemander ($1 contient l'intégralité de la commande saisie par l'utilisateur : pipes, redirection, enchaînement,...) :
preexec() {
if [[ "$1" =~ ssh|scp|ssh-copy-id|sftp ]]; then
ssh-add -L | grep -q "The agent has no identities." && echo "I'm SSH agent. Your passphrase, plz." && ssh-add -t 2h </chemin/vers/clé>
fi
}
Une autre solution élégante pour ce cas d'usage est d'utiliser gpg-agent avec la fonctionnalité ssh-agent. Un seul ssh-add suffit, il est persistant (comprendre que gpg ajoute la clé et le timeout dans ses fichiers internes dans .gnupg) et ensuite, à chaque ssh monserveur, hop, gpg-agent demande la passphrase de la clé s'il ne l'a plus en mémoire. Attention : dans ce mode, le comportement de ssh-add change : ssh -d|-D ne fonctionnent plus, et ssh-add -l|-L n'indiquent plus les clés dont la passphrase est en cache mais toutes les clés SSH connues de gpg-agent.
Mon Nov 9 02:55:30 2015 - permalink -
-
https://github.com/rcaloras/bash-preexec