技術メモ: 2008年1月アーカイブ

 linuxサーバにログインしていろいろしたとき、翌日になって何かまずいことをしでかした事に気づく(でもログがないから何をしたかわからない)ということがままある。というわけでlinuxサーバにsshでログインして何かしたとき、すべてログに残すノウハウ。もうあちこちで紹介されているけど、自分用メモということで。

~/.bash_profileに下記を追加
# .bash_profile

# Get the aliases and functions
if [ -f ~/.bashrc ]; then
. ~/.bashrc
fi

# User specific environment and startup programs

PATH=$PATH:$HOME/bin

export PATH
unset USERNAME

# keep everything in the log.
P_PROC=`ps aux | grep $PPID | grep sshd | awk '{ print $11 }'`
if [ "$P_PROC" = sshd: ]; then
script ~/log/`date +%Y%m%d-%H%M%S.log`
exit
fi

ログを保存するディレクトリを作成しておく。

mkdir ~/log

ログは、ホームディレクトリのlogフォルダに生成される。

以上。

ちなみに、~/.bash_profileに書くところ、間違って~/.bashrcに書くと、sshではつながるのにscpで接続するとき失敗する謎の怪現象を引き起こす。
Received too large (1581276736 B) SFTP packet. Max supported packet size is 102400 B.
The error is typically caused by message printed from startup script (like .profile). The message may start with "^@^@".

また、この設定を全員に適用したいのであれば、以下のようにする。


[root@localhost ~]# mkdir /etc/skel/log

~/.bash_profileの代わりに/etc/profileに上記内容を追加。
# .bash_profile

# Get the aliases and functions
if [ -f ~/.bashrc ]; then
. ~/.bashrc
fi

# User specific environment and startup programs

PATH=$PATH:$HOME/bin

export PATH
unset USERNAME

# keep everything in the log.
P_PROC=`ps aux | grep $PPID | grep sshd | awk '{ print $11 }'`
if [ "$P_PROC" = sshd: ]; then
script ~/log/`date +%Y%m%d-%H%M%S.log`
exit
fi

参考: