我有一个小型 SSH 服务器,我想编写一个脚本,以便在每次有人通过 SSH 登录时运行。
现在,我该怎么办?
我希望脚本在每次 ANYBODY 登录时都运行,并且我至少需要访问登录者的用户名和登录者的 IP 地址。
我考虑过使用/etc/bash.bashrc,但这是一个好的解决方案吗?例如,有没有办法让用户禁用它的使用,从而禁用我的脚本?如果是,我的其他选择是什么?
谢谢。
sar*_*old 12
要使用的机制取决于您的目标。
如果您希望为您的用户提供方便或友好的东西,那么/etc/profile如果您的所有用户都使用相同的 shell ,那么您就足够合理了。如果您希望命令仅在通过 登录时执行ssh,请将命令放入/etc/ssh/sshrc. (如果您不介意用户用他们自己的~/.ssh/rc文件覆盖命令。)
如果您想强制用户执行一个程序,并且只执行一个程序,那么ForceCommandDigitalRoss 描述的选项是一个很好的方法。(我个人会通过强制访问控制系统进一步限制用户,例如AppArmor、SELinux、TOMOYO或SMACK,以确保程序不会让用户逃脱。我在 AppArmor 上工作了十年,所以这就是我会首先选择工具,但其他都是由优秀程序员编写的优秀工具。)
如果您只想执行一个程序而不以任何方式打扰用户,那么最好的方法是使用该pam_exec(8)模块,该模块无法绕过,无论 shell 都可以工作,并且提供以用户或用户身份运行的轻松能力执行授权的程序的帐户。手册页给出了以下示例:
Add the following line to /etc/pam.d/passwd to rebuild the
NIS database after each local password change:
passwd optional pam_exec.so seteuid make -C /var/yp
This will execute the command
make -C /var/yp
with effective user ID.
Run Code Online (Sandbox Code Playgroud)
这可以扩展到运行auth,account,password,和session行动; 可能session最适合在登录时执行。只需添加如下一行:
session optional pam_exec.so log=/var/log/ssh_login_cmd /usr/local/bin/ssh_cmd
Run Code Online (Sandbox Code Playgroud)
到您的/etc/pam.d/sshd控制文件。