AlmaLinux8.10系でSSH接続時に実行したコマンドを記録する方法
Linuxで過去に実行したコマンドを確認したい際は「history」を使用しているが、Rloginのようなターミナルソフト経由だとスクロールの具合で見づらかったりする。そのため実行コマンドの履歴をログファイルとして記録しておき、必要に応じてそのファイルを確認する形を取りたい。以下に対応方法をメモ。
対応方法
シェルスクリプトの作成
サーバにSSH接続しスーパーユーザー権限で以下の通り進める。
# ログ保存用ディレクトリの作成 # 「-p」オプションは指定したディレクトリ構造ごとまとめて作成 mkdir -p /var/log/ssh_session # パーミッション変更 chmod 777 /var/log/ssh_session # スティッキービートの設定 # 指定したディレクトリは書き込み権限があっても自分以外のファイル削除ができなくなる(ファイル内容の書き換えは可) chmod +t /var/log/ssh_session # シェルスクリプトを作成 vi /etc/profile.d/ssh_script.sh
以下を記述し「:wq」で保存。
# SSH接続されているもしくはローカルログイン時に実行
if [ -n "$SSH_CONNECTION" ] || [ "$TERM" != "" ]; then
# ログの保存場所
LOG_DIR="/var/log/ssh_session"
# SSH接続元IPを取得。もしローカルログインで空なら "local" という文字にする
CLIENT_IP=$(echo "$SSH_CLIENT" | awk '{print $1}')
: "${CLIENT_IP:=local}"
# ログディレクトリ及びファイル名
LOG_FILE="$LOG_DIR/${USER}_${CLIENT_IP}.log"
# コマンド実行直前にログを記録する関数
log_ssh_command() {
# 現在実行しようとしているコマンド($BASH_COMMAND)がプロンプト表示処理や自分自身の関数ではない場合
if [ "$BASH_COMMAND" != "$PROMPT_COMMAND" ] && [ "$BASH_COMMAND" != "log_ssh_command" ]; then
# ログファイルにコマンド内容を書き込み
echo "$(date "+%Y-%m-%d %H:%M:%S") [${USER}] $BASH_COMMAND" >> "$LOG_FILE"
fi
}
# ユーザーがコマンドを実行する直前にlog_ssh_commandを実行
trap 'log_ssh_command' DEBUG
fi
以下コマンドで実行言々を追加し、一旦SSH接続を終了する。
# 全てのユーザーにシェルスクリプトの実行権限を追加 chmod +x /etc/profile.d/ssh_script.sh
ログファイルの確認
再度サーバにSSH接続し、以下コマンドを実行するとログファイルが生成されている筈なのでcatコマンドで確認すると良い。
#ログファイル用ディレクトリ内の確認 ll /var/log/ssh_session #ログファイルの確認 cat /var/log/ssh_session/【ログファイル名】
関連記事
-
-
CentOS6系から7系に(KAGOYAからIndigoに)移行した際のメモ
CentOS6系から7系に、さらにKAGOYAのVPSからWebARENA In ...
-
-
VPSに無料SSLのLet's Encryptを導入
SSLといえば有料という認識だったが、無料のものも出てきているという話を聞いた。 ...
-
-
WordPressでメモリを節約しつつ高速化する設定方法
メモリ1GのVPSを借りてWordpress以外にも、ちょいちょいものを置いてい ...
-
-
ConoHa / KAGOYAのVPSについて比較をメモ
テスト用や個人的なサイトに用いるサーバーはDTIのServersMan@VPSを ...
-
-
VPSでWebARENAのIndigoが安い
サーバの勉強や開発環境の為にVPSをレンタルすることが多い。当ブログのように常時 ...