在任何 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
参见ForceCommand
sshd_config(5)
:
强制执行ForceCommand指定的命令, 忽略客户端和 ~/.ssh/rc 提供的任何命令,如果 存在。使用用户的登录 shell 调用该命令 使用 -c 选项。这适用于 shell、命令或子系统 执行。它在 Match 块中最有用。命令 最初由客户提供的是 SSH_ORIGINAL_COMMAND 环境变量。指定命令 “internal-sftp” 将强制使用进程内 sftp 与服务器一起使用时不需要支持文件 Chroot目录。
答案4
您可以更改用户的 shell,以便在登录时执行自定义脚本。它可以是任何需要它的用户的默认 shell(我建议保留一个带有 bash 的管理员帐户以解决问题)。