SSH LocalCommand na saída

SSH LocalCommand na saída

Você ~/.ssh/configpode usar a LocalCommanddiretiva 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 bashpara 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_logoutpara 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 sshsessão for um shell de login (em vez de um comando remoto), bashserá originado /etc/bash.logoute ~/.bash_logoutquando você sair do shell.

Se quiser executar um comando remoto, você pode forçar bashum shell de login. O LocalCommandpoderia 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.

informação relacionada