Forçar a execução do comando ao sair ou desconectar?

Forçar a execução do comando ao sair ou desconectar?

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.dvocê 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 includee substackno sshdarquivo até chegar ao arquivo base.

Depois de identificar o arquivo /etc/pam.dque deseja usar, adicione uma linha como a seguinte à sessionseção:

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

Isso resultará em chamadas /etc/pam_session.shsempre 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+xroteiro)

informação relacionada