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

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

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

решение1

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

В /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сценарий)

Связанный контент