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

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

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

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

我看到有一个pam-scripts包,但我不确定它是否能满足我的要求,也不确定如何使用它。

任何帮助都值得感激!——马库斯

(我也在问库本图

答案1

这是 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

您可以用任何您想要的命令替换 echo 命令。IP 信息在 中$SSH_CONNECTION,您可以随意使用它。

如果你调用这个/usr/local/bin/ssh-command.sh,你可以将其添加到你的sshd_config

ForceCommand /usr/local/bin/ssh-command.sh

用这种方法来捕获某些用户可能也是个好主意Match。假设所有用户都属于“gobias”组:

Match Group gobias
    ForceCommand /usr/local/bin/ssh-command.sh

无论如何,也许值得一试。

答案2

只需编写一个脚本来执行任何您想做的事情,然后将其粘贴进去/etc/profile或可能/etc/bash.bashrc取决于您的需要。对这些文件的更改将应用​​于所有用户。不过,我不确定您如何使用这种方法在注销时发出通知。

或者,另一种方法是使用一个简单的守护进程监控/var/log/secure(或/var/log/auth,取决于您使用的发行版)新的(和关闭的)ssh 会话。这样,它就可以在登录和注销时发送通知。

答案3

如果文件 /etc/ssh/sshrc 存在,则 sh(1) 会在读取用户环境之后、启动用户 shell 或命令之前运行该文件。请参阅man sshd

例如,将以下内容添加到 /etc/ssh/sshrc 将产生用户通过 OpenSSH 成功登录时显示的输出:

~$ cat /etc/ssh/sshrc
echo "Login by $USER from $SSH_CLIENT on `date`" >> /var/log/ssh_connections.log

/var/log/ssh_connections.log 中的输出:

Login by Markus from 10.0.0.1 57853 22 on Fri Oct 29 03:41:31 2010

相关内容