SSH LocalCommand na saída

9

Em ~/.ssh/config , você pode usar a diretiva LocalCommand para executar um comando local sempre que se conectar a uma máquina remota via SSH. Mas como eu executo um comando quando eu saio de uma conexão SSH? Parece que os arquivos * .bashrc / .bash_profile * não são originados quando a conexão é finalizada ou fechada.

    
por Roberto Aloi 15.06.2012 / 21:20

2 respostas

11

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 qualquer máquina, então estou assumindo bash para ambos.

Se você quiser executá-lo na máquina remota, consulte ~/.bash_logout , que é executado quando um shell de login efetua logout normalmente. De man bash :

When a login shell exits, bash reads and executes commands from the file ~/.bash_logout, if it exists.

Você pode fazer um teste em ~/.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ê quiser 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 você tem a ideia.

    
por 15.06.2012 / 21:42
1

Você está no caminho certo. Se a sessão ssh for um shell de login (em vez de um comando remoto), bash fornecerá /etc/bash.logout e ~/.bash_logout quando você sair do shell.

Se você quiser executar um comando remoto, poderá forçar o bash a ser um shell de login. O LocalCommand poderia ser semelhante a este:

bash -l -c /execute/some/command

De man 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.
    
por 15.06.2012 / 21:36

Tags