SSHログイン時にコマンド実行

Linuxにおいて表題の通り。自身が管理しているサーバに対して他の人がログインする場合があるので、いつ・誰がログインしたのか通知が欲しいな、と思って調べていたら”/etc/ssh/sshrc“に辿り着いた。

■ 環境

  • Linux

■ man

`man`を確認したところ、下記のものがあった。


$ man ssh
  :
     /etc/ssh/sshrc
             Commands in this file are executed by ssh when the user logs in, just before the user's
             shell (or command) is started.  See the sshd(8) manual page for more information.
  :
$
$ man 8 sshd
  :
SSHRC
     If the file ~/.ssh/rc exists, sh(1) runs it after reading the environment files but before
     starting the user's shell or command.  It must not produce any output on stdout; stderr must be
     used instead.  If X11 forwarding is in use, it will receive the "proto cookie" pair in its stan‐
     dard input (and DISPLAY in its environment).  The script must call xauth(1) because sshd will
     not run xauth automatically to add X11 cookies.

     The primary purpose of this file is to run any initialization routines which may be needed
     before the user's home directory becomes accessible; AFS is a particular example of such an
     environment.

     This file will probably contain some initialization code followed by something similar to:

        if read proto cookie && [ -n "$DISPLAY" ]; then
                if [ `echo $DISPLAY | cut -c1-10` = 'localhost:' ]; then
                        # X11UseLocalhost=yes
                        echo add unix:`echo $DISPLAY |
                            cut -c11-` $proto $cookie
                else
                        # X11UseLocalhost=no
                        echo add $DISPLAY $proto $cookie
                fi | xauth -q -
        fi

     If this file does not exist, /etc/ssh/sshrc is run, and if that does not exist either, xauth is
     used to add the cookie.
  :
$

■ 実験

試しに下記のようなものを”/etc/ssh/sshrc“書いてみた。試す環境はVagrantで起動したCentOS7である。

echo "[`date '+%Y/%m/%d %H:%M:%S'`] $USER $SSH_CLIENT" >> /tmp/login

実際にSSHでログインしてみると、正常に稼働してくれているようである。2度ログインしてみた。

$ vagrant ssh
Last login: Fri Oct 23 19:10:15 2015 from 10.0.2.2
[vagrant@localhost ~]$ cat /tmp/login.lst
[2015/10/23 19:10:15] vagrant 10.0.2.2 60993 22
[2015/10/23 19:11:28] vagrant 10.0.2.2 60998 22
[vagrant@localhost ~]$

“/etc/ssh/sshrc”にスクリプトを書けば、もしくはスクリプトを実行するように書けば、自身への通知を行うことが可能であろう。

単純に、いつ・どのユーザがログインしたのかを知るには”/var/log/secure“を確認すれば良いのかもしれない。が、毎回見るのも面倒…というのもある。

以上。