SSH LocalCommand przy wyjściu

9

Za ~/.ssh/configpomocą tej LocalCommanddyrektywy można wykonać polecenie lokalne za każdym razem, gdy łączysz się ze zdalnym komputerem za pośrednictwem SSH. Ale jak wykonać polecenie, gdy wychodzę z połączenia SSH? Wygląda na to, że pliki * .bashrc / .bash_profile * nie są pobierane po zakończeniu lub zamknięciu połączenia.

Roberto Aloi
źródło
To pytanie jest ściśle związane z unix.stackexchange.com/questions/40830/…
Bananguin

Odpowiedzi:

11

W pytaniu nie określono, czy chcesz to wykonać na komputerze lokalnym, czy zdalnym. Nie jest również określone, która powłoka jest obecna na żadnej maszynie, więc zakładam, że bashobie.

Jeśli chcesz go wykonać na zdalnym komputerze, spójrz na ~/.bash_logout, który jest wykonywany, gdy powłoka logowania wyloguje się z wdziękiem. Od man bash:

Po wyjściu z powłoki logowania bash czyta i wykonuje polecenia z pliku ~/.bash_logout, jeśli istnieje.

Możesz wykonać test, ~/.bash_logoutaby sprawdzić, czy wylogowana powłoka jest sesją SSH, powinno działać coś takiego:

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

Jeśli chcesz go wykonać na komputerze lokalnym, utwórz opakowanie funkcji ssh. Powinno działać coś takiego:

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

To może być zbyt proste dla twoich potrzeb, ale masz pomysł.

Chris Down
źródło
Potrzebowałem wykonać polecenie na komputerze lokalnym. Dzieki za sugestie. Działa płynnie.
Roberto Aloi,
1

Jesteś na dobrej drodze. Jeśli sshsesja jest powłoką logowania (zamiast komendy zdalnej), bashźródło /etc/bash.logouti ~/.bash_logoutpo wyjściu z powłoki.

Jeśli chcesz wykonać polecenie zdalne, możesz zmusić się bashdo bycia powłoką logowania. LocalCommandMógłby być podobny do tego:

bash -l -c /execute/some/command

Od 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.
George M.
źródło
1
Nie w przypadku wykonywania polecenia zdalnego (jeśli podano polecenie, jest ono wykonywane na zdalnym hoście zamiast powłoki logowania). Jednak po bliższym przeczytaniu pytania PO wydaje się, że chce on wydarzyć się lokalnie, więc myślę, że odpowiedź jest bardziej odpowiednia.
George M.