Você ~/.ssh/config
pode usar a LocalCommand
diretiva para executar um comando local sempre que se conectar a uma máquina remota via SSH. Mas como executo um comando quandosaídauma conexão SSH? Parece que os arquivos *.bashrc/.bash_profile* não são originados quando a conexão termina ou é fechada.
Responder1
Não está especificado na pergunta se você deseja que isso seja executado na máquina local ou remota. Também não está especificado qual shell está presente em nenhuma das máquinas, então estou assumindo bash
para ambos.
Se você quiser executá-lo na máquina remota, veja ~/.bash_logout
, que é executado quando um shell de login efetua logout normalmente. De man bash
:
Quando um shell de login é encerrado, o bash lê e executa comandos do arquivo
~/.bash_logout
, se existir.
Você pode fazer um teste ~/.bash_logout
para verificar se o shell que está sendo desconectado é uma sessão SSH, algo como o seguinte deve funcionar:
if [[ $SSH_CLIENT || $SSH_CONNECTION || $SSH_TTY ]]; then
# commands go here
fi
Se você deseja executá-lo na máquina local, crie um wrapper de função em torno de ssh
. Algo como o seguinte deve funcionar:
ssh() {
if command ssh "$@"; then
# commands go here
fi
}
Isso pode ser simples demais para suas necessidades, mas essa é a ideia.
Responder2
Você está no caminho certo. Se a ssh
sessão for um shell de login (em vez de um comando remoto), bash
será originado /etc/bash.logout
e ~/.bash_logout
quando você sair do shell.
Se quiser executar um comando remoto, você pode forçar bash
um shell de login. O LocalCommand
poderia ser semelhante a isto:
bash -l -c /execute/some/command
Deman 1 bash
-c string If the -c option is present, then commands are read from
string. If there are arguments after the string, they are assigned to
the positional parameters, starting with $0.
-l Make bash act as if it had been invoked as a login shell
When a login shell exits, bash reads and executes commands from the
files ~/.bash_logout and /etc/bash.bash_logout, if the files exists.