종료시 SSH LocalCommand 로컬 명령을 실행

에서 ~/.ssh/config당신에게 사용할 수 있습니다 LocalCommand당신은 SSH를 통해 원격 컴퓨터에 연결할 때마다 로컬 명령을 실행 지침을. 그러나 SSH 연결을 종료 할 때 명령을 어떻게 실행 합니까? 연결이 종료되거나 닫힐 때 * .bashrc / .bash_profile * 파일은 소스가 아닌 것 같습니다.



답변

로컬 또는 원격 컴퓨터에서 실행하려는 경우 질문에 지정되어 있지 않습니다. 또한 어느 기계에 어느 쉘이 있는지 지정되어 있지 않으므로 bash두 가지를 모두 가정 합니다.

원격 시스템에서 실행하려면 ~/.bash_logout로그인 쉘이 정상적으로 로그 아웃 될 때 실행되는을 보십시오 . 보낸 사람 man bash:

로그인 쉘이 종료되면 bash는 파일에서 명령을 읽고 실행합니다 (있는 ~/.bash_logout경우).

~/.bash_logout로그 아웃중인 쉘이 SSH 세션인지 확인하기 위해 테스트를 수행 할 수 있습니다 . 다음과 같이 작동해야합니다.

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

로컬 컴퓨터에서 실행하려면 주위에 함수 래퍼를 만듭니다 ssh. 다음과 같은 것이 작동해야합니다.

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

그것은 당신의 필요에 비해 너무 간단 할 수 있지만, 당신은 아이디어를 얻습니다.


답변

당신은 올바른 길을 가고 있습니다. 는 IF ssh세션 (대신 원격 명령의) 로그인 쉘이며, bash소스 것입니다 /etc/bash.logout~/.bash_logout때 쉘을 종료합니다.

원격 명령을 실행하려면 강제 bash로 로그인 쉘이 될 수 있습니다 . 다음 LocalCommand과 유사 할 수 있습니다.

bash -l -c /execute/some/command

에서 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.