
Я вхожу в систему через 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
сценарий)