Memaksa perintah dijalankan saat logout atau terputus?

13

Saya masuk ke sistem melalui SSH dan saya ingin dapat memaksa perintah untuk dijalankan pada logout, apakah itu logout yang disengaja (keluar dari shell) atau karena koneksi SSH saya telah jatuh / telah diakhiri. Apakah ada cara untuk mengatur ini? Tebakan terbaik saya saat ini adalah mengubah shell login ke program yang memotong sinyal yang dikirim pada penutupan SSH (SIGHUP?) Dan mengeksekusi perintah itu, tapi saya bertanya-tanya apakah ada solusi yang lebih bersih.

David
sumber
Apakah Anda ingin menjalankan perintah pada mesin remote atau yang Anda inisialisasi koneksi dari?
xx4h

Jawaban:

20

Cara terbaik untuk melakukan ini adalah menggunakan pam .

Di /etc/pam.dAnda akan memiliki beberapa file, salah satunya akan dipanggil sshd. Jika Anda hanya ingin memengaruhi ssh, dan bukan info masuk lainnya (seperti GUI, atau TTY asli), Anda menginginkan file ini.
Jika Anda ingin memengaruhi semua login, Anda akan menginginkan file 'umum'. Nama file 'umum' lainnya ini bervariasi menurut distro, tetapi Anda dapat melacaknya dengan mengikuti includedan substackpernyataan dalam sshdfile sampai Anda mendapatkan ke file dasar.

Setelah Anda mengidentifikasi file /etc/pam.dyang ingin Anda gunakan, tambahkan baris seperti berikut ini ke sessionbagian:

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

Ini akan menghasilkan panggilan /etc/pam_session.shsetiap kali seseorang masuk dan keluar (apakah anggun atau tidak berterima kasih).

Sekarang Anda hanya perlu membuat /etc/pam_session.sh. Di bawah ini adalah contoh yang bisa Anda gunakan untuk menjalankan sesuatu setiap kali seseorang keluar:

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

(jangan lupa ke chmod a+xskrip)

Patrick
sumber