退出时的 SSH LocalCommand

退出时的 SSH LocalCommand

每当您通过 SSH 连接到远程计算机时,您都~/.ssh/config可以使用该LocalCommand指令执行本地命令。但是当我出口SSH 连接?当连接结束或关闭时,似乎不会获取 *.bashrc/.bash_profile* 文件。

答案1

问题中没有指定您是否希望在本地或远程计算机上执行此操作。也没有指定哪台机器上存在哪个 shell,因此我假设bash两台机器上都存在。

如果您想在远程计算机上执行它,请查看~/.bash_logout,它是在登录 shell 正常注销时执行的。从man bash

当登录 shell 退出时,bash 会从文件中读取并执行命令~/.bash_logout(如果存在)。

您可以进行测试~/.bash_logout以检查注销的 shell 是否是 SSH 会话,如下所示应该可以工作:

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

如果您想在本地计算机上执行它,请创建一个函数包装器ssh。像下面这样的东西应该有效:

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

这对于您的需求来说可能太简单了,但您明白了。

答案2

你走在正确的轨道上。如果ssh会话是登录 shell(而不是远程命令),bash则会在退出 shell 时/etc/bash.logout获取源。~/.bash_logout

如果你想执行远程命令,那么你可以强制bash成为登录shell。可能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.

相关内容