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
参考:
これ、/etc/profileに書くのはよくないかもしれないなぁ。
scriptでログインスクリプトの実行が止まっちゃうので、~/.bash_profileが聞かなくなるような気がする。どうしたものか。