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

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

在任何 ssh 登录/连接(任何通过 ssh 登录的人)时,是否有办法执行脚本?使用 OpenSSH 服务器。

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

谢谢!

答案1

如果您希望以不影响用户体验的方式执行此操作,请查看 syslog 替代品(例如 syslog-ng)。当有人登录时,您可以在 SSH 服务器发送到 syslog 的日志消息上触发该命令。

这种方法有点鲁布·戈德堡式的,并且依赖于系统日志的正常工作。YMMV,恕我直言,SLATFATF

答案2

你已每次有人登录时都会执行的脚本:/etc/profile

您可以修改该脚本以执行您想要的任何任务,或者让它直接调用您的脚本。在 Debian 衍生产品中,您只需放入您的自定义脚本(以 结尾.sh/etc/profile.d,它就会被自动调用。

笔记: 我刚才说的所有内容仅适用于 Bourne shell 衍生产品,例如默认的/bin/sh、ash、bash、ksh 等。大多数用户坚持使用 bash,因此上述说明可能就是您所需要的。其他 shell 系列使用其他启动脚本。例如,Tcsh 将/etc/csh.cshrc在登录时执行。

答案3

参见ForceCommandsshd_config(5)

强制执行ForceCommand指定的命令,
忽略客户端和 ~/.ssh/rc 提供的任何命令,如果
存在。使用用户的登录 shell 调用该命令
使用 -c 选项。这适用于 shell、命令或子系统
执行。它在 Match 块中最有用。命令
最初由客户提供的是
SSH_ORIGINAL_COMMAND 环境变量。指定命令
“internal-sftp” 将强制使用进程内 sftp
与服务器一起使用时不需要支持文件
Chroot目录。

答案4

您可以更改用户的 shell,以便在登录时执行自定义脚本。它可以是任何需要它的用户的默认 shell(我建议保留一个带有 bash 的管理员帐户以解决问题)。

相关内容