Принудительно запустить команду при выходе из системы или отключить?

13

Я вхожу в систему через SSH, и я хотел бы иметь возможность принудительно запускать команду при выходе из системы, будь то преднамеренный выход из системы (выход из оболочки) или из-за того, что мое соединение SSH было разорвано / разорвано. Есть ли способ настроить это? Мое лучшее предположение сейчас состоит в том, чтобы изменить оболочку входа в систему на программу, которая перехватывает сигнал, посылаемый при закрытии SSH (SIGHUP?), И затем выполняет команду, но мне интересно, есть ли более чистое решение.

Дэвид
источник
Вы хотите выполнить команду на удаленной машине или на той, с которой вы инициализировали соединение?
xx4h

Ответы:

20

Лучший способ сделать это - использовать pam .

У /etc/pam.dвас будет несколько файлов, один из них будет называться sshd. Если вы хотите воздействовать только на ssh, а не на другие имена входа (например, GUI или реальный TTY), вам нужен этот файл.
Если вы хотите повлиять на все логины, вам нужен «общий» файл. Название этого другого файла «общего» варьируется в зависимости от дистрибутива, но вы можете отслеживать его вниз, следуя includeи substackзаявление в sshdфайле , пока вы не дойдете до базового файла.

После того, как вы определили файл /etc/pam.d, который хотите использовать, добавьте в sessionраздел такую ​​строку :

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

Это приведет к вызову /etc/pam_session.shкаждый раз, когда кто-то входит в систему и выходит из системы (изящно или без изящества).

Теперь вам просто нужно создать /etc/pam_session.sh. Ниже приведен пример, который вы можете использовать для запуска чего-либо каждый раз, когда кто-то выходит из системы:

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

(не забудьте chmod a+xсценарий)

Патрик
источник