LocalCommand SSH all'uscita


9

In ~/.ssh/configè possibile utilizzare la LocalCommanddirettiva per eseguire un comando locale ogni volta che ci si connette a una macchina remota tramite SSH. Ma come posso eseguire un comando quando esco da una connessione SSH? Sembra che i file * .bashrc / .bash_profile * non provengano quando la connessione termina o viene chiusa.


Questa domanda è strettamente correlata a unix.stackexchange.com/questions/40830/…
Bananguin,

Risposte:


11

Non è specificato nella domanda se si desidera che venga eseguito sul computer locale o remoto. Inoltre non è specificato quale shell sia presente su entrambe le macchine, quindi presumo bashper entrambe.

Se vuoi eseguirlo sul computer remoto, guarda ~/.bash_logout, che viene eseguito quando una shell di login si disconnette con grazia. Da man bash:

Quando esce una shell di login, bash legge ed esegue i comandi dal file ~/.bash_logout, se esiste.

È possibile eseguire un test ~/.bash_logoutper verificare se la shell da cui si è disconnessi è una sessione SSH, qualcosa di simile al seguente dovrebbe funzionare:

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

Se si desidera eseguirlo sul computer locale, creare un wrapper di funzioni ssh. Qualcosa di simile al seguente dovrebbe funzionare:

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

Potrebbe essere troppo semplice per le tue esigenze, ma hai capito.


Avevo bisogno che il comando fosse eseguito sulla macchina locale. Grazie per il suggerimento Funziona senza problemi.
Roberto Aloi,

1

Sei sulla strada giusta. Se la sshsessione è una shell di accesso (anziché un comando remoto), bashverrà eseguita l'origine /etc/bash.logoute ~/.bash_logoutquando si esce dalla shell.

Se si desidera eseguire un comando remoto, è possibile forzare la bashshell di accesso. Il LocalCommandpotrebbe essere simile a questo:

bash -l -c /execute/some/command

A partire dal 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.

1
Non se si esegue un comando remoto (Se viene specificato un comando, viene eseguito sull'host remoto anziché su una shell di accesso). Tuttavia, leggendo più da vicino la domanda del PO, sembra che desideri che accada qualcosa localmente, quindi penso che la tua risposta sia più appropriata.
George M,
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.