
Estou fazendo login em um sistema via SSH e gostaria de poder forçar a execução de um comando no logout, seja um logout intencional (saindo do shell) ou porque minha conexão SSH foi interrompida/terminada. Existe alguma maneira de configurar isso? Meu melhor palpite agora é alterar o shell de login para um programa que intercepte o sinal enviado no fechamento do SSH (SIGHUP?) E execute o comando então, mas estou me perguntando se existe uma solução mais limpa.
Responder1
A melhor maneira de fazer isso seria usarPam.
Nele /etc/pam.d
você terá vários arquivos, um deles se chamará sshd
. Se você deseja afetar apenas o ssh, e não outros logins (como uma GUI ou TTY real), você deseja este arquivo.
Se quiser afetar todos os logins, você precisará de um arquivo 'comum'. O nome desse outro arquivo 'comum' varia de acordo com a distribuição, mas você pode localizá-lo seguindo as instruções include
e substack
no sshd
arquivo até chegar ao arquivo base.
Depois de identificar o arquivo /etc/pam.d
que deseja usar, adicione uma linha como a seguinte à session
seção:
session optional pam_exec.so quiet /etc/pam_session.sh
Isso resultará em chamadas /etc/pam_session.sh
sempre que alguém fizer login e logout (seja normalmente ou de maneira desleixada).
Agora você só precisa criar /etc/pam_session.sh
. Abaixo está um exemplo que você pode usar para executar algo sempre que alguém fizer logout:
#!/bin/sh
if [ "$PAM_TYPE" = "close_session" ]; then
something
fi
(não se esqueça do chmod a+x
roteiro)