¿Forzar el comando para ejecutarse al cerrar sesión o desconectarse?

13

Estoy iniciando sesión en un sistema a través de SSH y me gustaría poder forzar un comando para que se ejecute al cerrar sesión, ya sea que se trate de un cierre de sesión intencional (salir del shell) o porque mi conexión SSH se ha caído / terminado. ¿Hay alguna forma de configurar esto? Mi mejor conjetura en este momento es cambiar el shell de inicio de sesión a un programa que intercepte la señal enviada al cerrar SSH (SIGHUP?) Y ejecute el comando en ese momento, pero me pregunto si hay una solución más limpia.

David
fuente
¿Desea ejecutar el comando en la máquina remota o en el que inició la conexión?
xx4h

Respuestas:

20

La mejor manera de hacer esto sería usar pam .

En /etc/pam.dusted tendrá varios archivos, se llamará uno de ellos sshd. Si solo desea afectar ssh, y no otros inicios de sesión (como una GUI o un TTY real), desea este archivo.
Si desea afectar todos los inicios de sesión, querrá un archivo 'común'. El nombre de este otro archivo 'común' varía según la distribución, pero puede rastrearlo siguiendo las declaraciones includey substacken el sshdarchivo hasta llegar al archivo base.

Una vez que haya identificado el archivo /etc/pam.dque desea usar, agregue una línea como la siguiente a la sessionsección:

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

Esto resultará en llamadas /etc/pam_session.shcada vez que alguien inicie sesión y cierre sesión (ya sea con gracia o sin gracia).

Ahora solo necesitas crear /etc/pam_session.sh. A continuación se muestra un ejemplo que puede usar para ejecutar algo cada vez que alguien cierra sesión:

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

(no te olvides chmod a+xdel guión)

Patricio
fuente