如何在任何sshlogin(使用OpenSSH)时执行系统范围的脚本?

在任何SSHlogin/连接(任何人通过SSHlogin),有没有办法执行一个脚本? 使用OpenSSH服务器。

脚本不应该被任何用户修改,当然,所以这应该是一个系统范围的脚本。

谢谢!

如果你打算不干涉用户体验,可以看一下syslog的替代品(例如syslog-ng)。 当有人login时,可以通过SSH服务器触发日志消息发送到系统日志的命令。

这种方法是有点rube-goldbergian,并依赖syslog工作正常。 YMMV,恕我直言,SLATFATF

每当有人login时,您已经一个正在执行的脚本: /etc/profile

您可以修改该脚本来执行您想要的任何任务,或者直接调用脚本。 在Debian衍生产品中,您可以将自定义脚本(以.sh结尾)放在/etc/profile.d并自动调用。

注:我刚才所说的一切只适用于Bourne shell衍生物,比如默认的/bin/sh ,ash,bash,ksh等等。大多数用户坚持使用bash,所以上面的指示可能就是您所需要的。 其他系列的shell使用其他启动脚本。 例如,Tcsh将在login时执行/etc/csh.cshrc

请参阅sshd_config(5) ForceCommand

强制执行由ForceCommand指定的命令,
忽略客户端提供的任何命令以及〜/ .ssh / rc
当下。 该命令通过使用用户的loginshell进行调用
与-c选项。 这适用于shell,命令或子系统
执行。 它在Match块内最有用。 命令
最初由客户提供的是可用的
 SSH_ORIGINAL_COMMAND环境variables。 指定一个命令
 ``internal-sftp''将强制使用进程内的sftp
服务器,使用时不需要支持文件
 ChrootDirectory。

您可以更改用户的shell,以便在login时执行自定义脚本。 它可能是任何用户需要它的默认shell(我build议保持一个pipe理员帐户与bash来解决问题)。