log of ssh and scp

  • 投稿日:
  • by

ssh の起動コマンドや scp の操作ログが必要という案件があったので、その小細工。

ssh で起動した、あるいは scp で取得したファイルのログがとりたいらしい。
そんなものが必要かという話をスルーして考える。

ssh 鍵認証は、.ssh/authorized_keys に公開鍵を記述して、ssh のログイン認証を行う。
この authorized_keys にある 「command」という option を利用する。

「command」 には、本来は「アクセス時に実行されるコマンド」を記述する。
たとえば、アクセスしてファイル一覧が欲しければ、公開鍵に以下のように記述する。

command="/bin/ls",no-port-forwarding,no-agent-forwarding,no-X11-forwarding,no-pty ssh-dss AAA....

指定された鍵でアクセスすると、「/bin/ls」の結果が問答無用で返ってくる。
また、実行されるコマンドで環境変数「SSH_ORIGINAL_COMMAND」を参照すると、オリジナルのコマンド
文字列が取得できる。
この機能を利用して「/bin/ls」の代わりに、以下のような「/home/hoge/logger.sh」を設定する。

#!/bin/sh

date >> /home/hoge/LOG
echo $SSH_ORIGINAL_COMMAND >> /home/hoge/LOG
$SSH_ORIGINAL_COMMAND

これで、/home/hoge/LOG に実行されたコマンドが保存される。
しかし、このままだとユーザ「hoge」が/home/hoge/LOG を書き換え可能なので、echo のところは、syslog や、sbit付きの log script を実行した方がよい。

実際に、remotehost 上のファイル「test.dat」をscp で取得してみる。

% scp remotehost:test.dat .

LOG ファイルには以下のように出力される。

2008年 10月 21日 火曜日 17:27:29 JST
scp -f test.dat