每次有人通过SSHlogin到Linux机器时执行程序

我有一个小的SSH服务器,我想写一个脚本来运行每次有人通过SSHlogin。

现在,我将如何去做呢?

我希望每次ANYBODYlogin时脚本都能运行,而且我需要至less访问login人员的用户名和login人员的IP地址。

我想过使用/etc/bash.bashrc ,但这是一个很好的解决scheme吗? 例如,有没有一种方法,用户可以禁用它的使用,从而禁用我的脚本? 如果是的话,我还有其他的select吗?

谢谢。

使用的机制取决于你的目标。

如果您希望为您的用户提供方便友好的话,那么如果您的所有用户使用相同的shell,那么您的/etc/profile就足够合理。 如果你想让这些命令在通过ssh时候执行,把命令放到/etc/ssh/sshrc 。 (如果你不介意用户用自己的~/.ssh/rc文件覆盖命令)

如果你想强制用户执行一个程序, 并且只有一个程序 ,那么DigitalRoss所描述的ForceCommand选项是一个好方法。 (我个人会进一步限制用户使用强制访问控制系统,如AppArmor , SELinux , TOMOYO或SMACK ,以确保程序不能让用户逃脱。我在AppArmor工作了十年,所以这就是我会先select工具,但其他工具是优秀程序员编写的好工具。)

如果你只是想让一个程序执行而不以任何方式打扰用户 ,那么最好的方法是使用不能被绕过的pam_exec(8)模块,不pipeshell如何工作,并且提供简单的用户运行能力或者作为执行授权的程序的用户账户。 该手册给出了以下示例:

  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. 

这可以扩展到运行authaccountpasswordsession操作; 可能session最好是在login时执行。只需添加一行:

 session optional pam_exec.so log=/var/log/ssh_login_cmd /usr/local/bin/ssh_cmd 

到你的/etc/pam.d/sshd控制文件。

新版本的OpenSSH有一个称为ForceCommand的服务器function,它可以控制脚本,而不是用户想要的操作(scp,ssh,…)。 脚本通过了原来的命令,所以你可以在做任何你需要做的事情之后链接到它。

从sshd_config(5):

ForceCommand

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

我曾经使用这一次来覆盖scp并提供安全的gem上传,而不会授予每个用户授权上传他们不需要或不需要的gem交互访问权限。

一种方法是使用syslog-ng作为syslog守护进程,并将其configuration为在每次某个日志条目(例如成功的sshlogin名)匹配时运行脚本背景。

看一下这个:

http://ubuntuforums.org/showthread.php?p=9383927

我不相信有一种方法可以禁止运行。 任何人都可以validation这一点?