每当有人通过SSH登录到Linux盒子时执行程序

我有一个小型SSH服务器,我想编写一个脚本,每次有人通过SSH登录时运行.

现在,我该怎么做呢?

我希望每次ANYBODY登录时都会运行该脚本,并且我至少需要访问登录用户的用户名以及该用户登录的IP地址.

我想过使用/etc/bash.bashrc,但这是一个很好的解决方案吗?例如,用户是否可以禁用其使用方式,从而禁用我的脚本?如果是,我的其他选择是什么?

谢谢.

解决方法

使用机制取决于您的目标.

如果您希望为用户提供方便或友好的东西,那么如果您的所有用户都使用相同的shell,那么/ etc / profile是合理的.如果希望命令仅在通过ssh登录时执行,请将命令放入/ etc / ssh / sshrc. (如果您不介意用户使用自己的〜/ .ssh / rc文件覆盖命令.)

如果要强制用户执行一个程序,并且只执行一个程序,则DigitalRoss所描述的ForceCommand选项是一种很好的方法. (我个人会进一步限制用户使用mandatory access control系统,如AppArmor,SELinux,TOMOYOSMACK,以确保程序不允许用户逃脱.我已经在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.

这可以扩展为在身份验证,帐户,密码和会话操作上运行;可能会话最好在登录时执行.只需添加如下行:

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

到/etc/pam.d/sshd控制文件.

相关文章

linux常用进程通信方式包括管道(pipe)、有名管道(FIFO)、...
Linux性能观测工具按类别可分为系统级别和进程级别,系统级别...
本文详细介绍了curl命令基础和高级用法,包括跳过https的证书...
本文包含作者工作中常用到的一些命令,用于诊断网络、磁盘占满...
linux的平均负载表示运行态和就绪态及不可中断状态(正在io)的...
CPU上下文频繁切换会导致系统性能下降,切换分为进程切换、线...