Forçar que o comando seja executado ao sair ou desconectar?

13

Estou efetuando login em um sistema via SSH e gostaria de poder forçar um comando a ser executado no logout, seja um logout intencional (saindo do shell) ou porque minha conexão SSH caiu / foi encerrada. 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 SSH (SIGHUP?) E execute o comando então, mas estou me perguntando se há uma solução mais limpa.

David
fonte
Deseja executar o comando na máquina remota ou na qual você inicializou a conexão?
Xx4h

Respostas:

20

A melhor maneira de fazer isso seria usar o pam .

Em /etc/pam.dvocê terá vários arquivos, um deles será chamado sshd. Se você deseja afetar apenas o ssh, e não outros logons (como uma GUI ou TTY real), você deseja esse arquivo.
Se você deseja afetar todos os logons, desejará 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 graciosa ou não).

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 chmod a+xdo script)

Patrick
fonte