SSH LocalCommand al salir

SSH LocalCommand al salir

Puede ~/.ssh/configusar la LocalCommanddirectiva para ejecutar un comando local cada vez que se conecte a una máquina remota a través de SSH. Pero, ¿cómo ejecuto un comando cuandosalidauna conexión SSH? Parece que los archivos *.bashrc/.bash_profile* no se obtienen cuando la conexión finaliza o se cierra.

Respuesta1

No se especifica en la pregunta si desea que esto se ejecute en la máquina local o remota. Tampoco se especifica qué shell está presente en cada máquina, por lo que supongo que bashpara ambas.

Si desea ejecutarlo en la máquina remota, mire ~/.bash_logout, que se ejecuta cuando un shell de inicio de sesión cierra la sesión correctamente. De man bash:

Cuando se cierra un shell de inicio de sesión, bash lee y ejecuta comandos del archivo ~/.bash_logout, si existe.

Puede hacer una prueba ~/.bash_logoutpara verificar si el shell del que se está desconectando es una sesión SSH, algo como lo siguiente debería funcionar:

if [[ $SSH_CLIENT || $SSH_CONNECTION || $SSH_TTY ]]; then
    # commands go here
fi

Si desea ejecutarlo en la máquina local, cree un contenedor de funciones alrededor de ssh. Algo como lo siguiente debería funcionar:

ssh() {
    if command ssh "$@"; then
        # commands go here
    fi
}

Puede que sea demasiado simple para sus necesidades, pero se entiende la idea.

Respuesta2

Estás en el camino correcto. Si la sshsesión es un shell de inicio de sesión (en lugar de un comando remoto), bashse generará /etc/bash.logouty ~/.bash_logoutcuando salga del shell.

Si desea ejecutar un comando remoto, puede forzar bashque sea un shell de inicio de sesión. Podría LocalCommandser similar a esto:

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.

información relacionada