Puede ~/.ssh/config
usar la LocalCommand
directiva 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 bash
para 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_logout
para 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 ssh
sesión es un shell de inicio de sesión (en lugar de un comando remoto), bash
se generará /etc/bash.logout
y ~/.bash_logout
cuando salga del shell.
Si desea ejecutar un comando remoto, puede forzar bash
que sea un shell de inicio de sesión. Podría LocalCommand
ser 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.