勉強したことのメモ

Webエンジニア / プログラマが勉強したことのメモ。

AlmaLinux8.10系でSSH接続時に実行したコマンドを記録する方法

  サーバー VPS

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/【ログファイル名】

 - サーバー VPS

  関連記事

ConoHaのVPSの使用感について
ConoHaのVPSの使用感について

ConoHaのVPSを試しに使ってみたので使用感をメモ。使用したプランはメモリ5 ...

DTIからKAGOYAのVPSに引っ越した際の作業内容と上手くいかなかった点をメモ
DTIからKAGOYAのVPSに引っ越した際の作業内容と上手くいかなかった点をメモ

DTIのServersMan@VPSからKAGOYAのVPS(KVM)へ引越し作 ...

KAGOYA(OpenVZ)のVPSの使用感について
KAGOYA(OpenVZ)のVPSの使用感について

KAGOYAのVPSを試しに使ってみたので使用感をメモ。使用したプランはOpen ...

ConoHa / KAGOYAのVPSについて比較をメモ
ConoHa / KAGOYAのVPSについて比較をメモ

テスト用や個人的なサイトに用いるサーバーはDTIのServersMan@VPSを ...

DTIからKAGOYAのVPS(KVM)に移った感想
DTIからKAGOYAのVPS(KVM)に移った感想

DTIからKAGOYAのVPS(KVM)に引越し、一通りチェックを終えたので感想 ...