
SSH 経由でシステムにログインしていますが、意図的なログアウト (シェルの終了) であっても、SSH 接続が切断された/終了した場合でも、ログアウト時にコマンドを強制的に実行できるようにしたいと考えています。これを設定する方法はありますか? 現時点での私の最善の推測は、ログイン シェルを、SSH の終了時に送信されるシグナル (SIGHUP?) をインターセプトしてコマンドを実行するプログラムに変更することですが、もっとクリーンな解決策があるかどうか疑問に思っています。
答え1
これを行う最良の方法は、パム。
には/etc/pam.d
複数のファイルがあり、そのうちの 1 つは と呼ばれます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
(スクリプトを忘れないでください)