Forcer l'exécution de la commande à la déconnexion ou à la déconnexion?

13

Je me connecte à un système via SSH et j'aimerais pouvoir forcer l'exécution d'une commande à la déconnexion, que ce soit une déconnexion intentionnelle (sortie du shell) ou parce que ma connexion SSH a chuté / s'est terminée. Existe-t-il un moyen de configurer cela? Ma meilleure supposition en ce moment est de changer le shell de connexion en un programme qui intercepte le signal envoyé à la fermeture SSH (SIGHUP?) Et exécute alors la commande, mais je me demande s'il existe une solution plus propre.

David
la source
Voulez-vous exécuter la commande sur la machine distante ou sur celle à partir de laquelle vous avez initialisé la connexion?
xx4h

Réponses:

20

La meilleure façon de le faire serait d'utiliser pam .

Dans /etc/pam.dvous aurez plusieurs fichiers, l'un d'eux sera appelé sshd. Si vous souhaitez uniquement affecter ssh, et non les autres connexions (comme une interface graphique ou un vrai ATS), vous voulez ce fichier.
Si vous souhaitez affecter toutes les connexions, vous aurez besoin d'un fichier «commun». Le nom de cet autre fichier «commun» varie selon la distribution, mais vous pouvez le retrouver en suivant les instructions includeet substackdans le sshdfichier jusqu'à ce que vous arriviez au fichier de base.

Une fois que vous avez identifié le fichier /etc/pam.dque vous souhaitez utiliser, ajoutez une ligne telle que la suivante à la sessionsection:

session     optional    pam_exec.so quiet /etc/pam_session.sh

Cela se traduira par un appel /etc/pam_session.shchaque fois que quelqu'un se connecte et se déconnecte (que ce soit gracieusement ou non).

Il ne vous reste plus qu'à créer /etc/pam_session.sh. Voici un exemple que vous pouvez utiliser pour exécuter quelque chose à chaque fois que quelqu'un se déconnecte:

#!/bin/sh
if [ "$PAM_TYPE" = "close_session" ]; then
  something
fi

(n'oubliez pas chmod a+xle script)

Patrick
la source