退出时使用SSH LocalCommand


Answers:


11

如果要在本地或远程计算机上执行此操作,则未在问题中指定。还没有指定哪个机器上存在哪个shell,因此我假设bash两者都存在。

如果要在远程计算机上执行它,请查看~/.bash_logout,当登录shell正常注销时执行。来自man bash

当退出登录shell时,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
}

对于您的需求而言,这可能太简单了,但是您明白了。


我需要在本地计算机上执行命令。谢谢你的建议。它工作顺利。
罗伯托·阿洛伊

1

您走在正确的轨道上。如果ssh会话是登录外壳程序(而不是远程命令),bash则将在退出外壳程序时提供来源/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.

1
如果执行远程命令,则不可以(如果指定了命令,则在远程主机而不是登录Shell上执行。)但是,仔细阅读OP问题,似乎他希望在本地进行某些操作,因此我认为您的回答更为合适。
乔治M
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.