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

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

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

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

您可以强制命令SSH用户而不是他们请求的用户(如果他们没有给出特定命令,则强制命令)。 这可以通过在/etc/ssh/sshd_config使用ForceCommand /root/ssh-wrapper类的命令来指定(脚本所在位置或命名方式无关紧要,只需确保所有用户都可以执行它并且sshd配置文件指向它)。 您还需要重新启动/重新加载sshd强制命令可以将原始命令作为$SSH_ORIGINAL_COMMAND

我刚刚一起攻击了这个脚本:

 #! /bin/sh # add logger options when needed log="logger -t ssh-wrapper" # find IP address ip=`echo $SSH_CONNECTION | cut -d " " -f 1` $log $USER login from $ip espeak "$USER just logged in from $ip" > /dev/null 2>&1 $log command: ${SSH_ORIGINAL_COMMAND:-shell} ${SSH_ORIGINAL_COMMAND:-shell} $log $USER logout espeak "$USER just logged out" > /dev/null 2>&1 

现在,每次登录或注销时,语音都会告诉我,并且日志条目会写入syslog。 它还记录命令。 您可以使用以下内容来“关注”您的sshd用法:

 tailf /var/log/syslog | grep ssh-wrapper 

请注意,此脚本大部分未经测试,因此使用风险自负! 😉

PS:请记住,此脚本是作为登录用户运行的,因此如果您更改它以添加更多function,则无法执行所需的一切…

我之前在日志文件中看过这个匹配的事件(这可以让你灵活地匹配任何东西)。 此页面格式不正确,但它可能会帮助您入门: https ://help.ubuntu.com/community/AudibleLogs#Play with esound

(在ServerFault上从同一个问题交叉发布的答案)

只需编写一个脚本来执行任何操作,然后根据需要将其粘贴到/etc/profile/etc/bash.bashrc 。 对这些文件的更改将适用于所有用户。 不过,我不确定你是怎么用这种方法通知注销的。

或者,另一种方法是为新(和关闭)ssh会话设置一个简单的守护程序监视/var/log/auth 。 这样它就能够在登录和注销时发送通知。

你可以使用sshrc(man sshd,搜索sshrc)

如果它存在,ssh将执行/ etc / ssh / sshrc,你可以从那里运行一个脚本(或调用多个脚本)

你可以调用任何bash变量,比如$USER或者通过IP获取IP

 read -d " " ip <<< $SSH_CONNECTION 

你可以编写一个脚本来测试或记录你想要的东西。

退出脚本......好吧,这就是我要搜索的内容! :d