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

sun*_*ide 12 server ssh session scripts

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

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

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

Jan*_*anC 10

您可以将命令强制给您的 SSH 用户,而不是他们请求的用户(如果他们没有提供特定命令,则可以强制执行他们的 shell)。这可以通过使用类似ForceCommand /root/ssh-wrapperin的内容指定该命令来完成/etc/ssh/sshd_config(脚本位于何处或它的命名方式无关紧要,只需确保它可由所有用户执行并且 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
Run Code Online (Sandbox Code Playgroud)

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

tailf /var/log/syslog | grep ssh-wrapper
Run Code Online (Sandbox Code Playgroud)

请注意,此脚本大多未经测试,因此使用风险自负! ;-)

PS:记住这个脚本是作为登录的用户运行的,所以如果你改变它以添加更多功能,你不能做你想做的一切......