Czy wymusić uruchomienie polecenia przy wylogowaniu czy rozłączyć?

13

Loguję się do systemu za pośrednictwem SSH i chciałbym móc wymusić uruchomienie komendy podczas wylogowywania, niezależnie od tego, czy jest to celowe wylogowanie (wyjście z powłoki), czy dlatego, że moje połączenie SSH zostało zerwane / przerwane. Czy jest jakiś sposób na skonfigurowanie tego? Moim najlepszym przypuszczeniem jest teraz zmiana powłoki logowania na program, który przechwytuje sygnał wysyłany przy zamykaniu SSH (SIGHUP?) I wykonuje wtedy polecenie, ale zastanawiam się, czy istnieje bardziej przejrzyste rozwiązanie.

David
źródło
Czy chcesz wykonać polecenie na komputerze zdalnym czy na tym, z którego zainicjowano połączenie?
xx4h

Odpowiedzi:

20

Najlepszym sposobem na to byłoby użycie pam .

W /etc/pam.dbędziesz mieć kilka plików, jedna z nich zostanie wywołana sshd. Jeśli chcesz wpływać tylko na ssh, a nie na inne loginy (takie jak GUI lub prawdziwy TTY), potrzebujesz tego pliku.
Jeśli chcesz wpłynąć na wszystkie loginy, będziesz potrzebować „wspólnego” pliku. Nazwa tego „wspólnego” pliku różni się w zależności od dystrybucji, ale można go wyśledzić, postępując zgodnie z instrukcjami includei substackw sshdpliku, aż dojdziesz do pliku podstawowego.

Po zidentyfikowaniu pliku /etc/pam.d, którego chcesz użyć, dodaj do sessionsekcji następujący wiersz :

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

Spowoduje to wywoływanie za /etc/pam_session.shkażdym razem, gdy ktoś się zaloguje i wyloguje (z wdziękiem lub z wdziękiem).

Teraz musisz tylko utworzyć /etc/pam_session.sh. Poniżej znajduje się przykład, za pomocą którego można uruchomić coś za każdym razem, gdy ktoś się wylogowuje:

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

(nie zapomnij o chmod a+xskrypcie)

Patrick
źródło