Ubuntu/Debian/OpenSSH:在 SSH 登录和/或注销时运行(系统)脚本

sun*_*ide 2 scripting ubuntu ssh

在 Ubuntu 上,我希望我的 OpenSSH 服务器在用户使用 SSH 登录时启动脚本,最好是传递主机名或 IP 以及用户名。此外,我希望它在会话终止时(传递用户名)运行脚本。这些脚本不应在用户会话中运行,而应在系统范围内运行。

这个想法是在登录和注销时发出音频警告,例如使用espeak,并在外部显示器上显示信息。

我已经看到有一个pam-scripts包,但我不确定这是否符合我的要求,也不知道如何使用它。

任何帮助表示赞赏!——马库斯

(我也在askubuntu上发布了这个问题。)

Cak*_*mox 8

这是一个由 sshd_config 中的 ForceCommand 调用的包装脚本。这区分了登录命令和通过 ssh 调用的命令,例如ssh host "ls -l",因为您可能希望以不同的方式处理它们。

#!/bin/bash

if [ -n "$SSH_ORIGINAL_COMMAND" ]; then
    eval $SSH_ORIGINAL_COMMAND
else
    echo "LOGIN: $USER $SSH_CONNECTION" >> /tmp/ssh.log
    $SHELL
    echo "LOGOUT: $USER $SSH_CONNECTION" >> /tmp/ssh.log
fi
Run Code Online (Sandbox Code Playgroud)

你可以用你想要的任何东西替换 echo 命令。IP 信息在 中$SSH_CONNECTION,随心所欲。

如果您调用 this /usr/local/bin/ssh-command.sh,您会将其添加到您的sshd_config

ForceCommand /usr/local/bin/ssh-command.sh
Run Code Online (Sandbox Code Playgroud)

使用它Match来仅捕获某些用户可能是一个好主意。假设所有用户都在“gobias”组中:

Match Group gobias
    ForceCommand /usr/local/bin/ssh-command.sh
Run Code Online (Sandbox Code Playgroud)

不管怎样,也许值得一试。