「サーバーで誰が何をしたか分からない…」
「不正アクセスがあったかもしれないけど、確認する方法が分からない」
「複数人で管理してるけど、誰がミスしたか特定できない」
こんな不安を抱えていませんか?
SSH操作ログは、サーバー管理の「防犯カメラ」のような存在です。
正しくログを記録・管理することで、トラブルの原因究明、不正アクセスの検知、コンプライアンス対応まで、あらゆる場面で役立ちます。
この記事では、SSH操作ログの基本から高度な監視システムの構築まで、実践的に解説していきます!
SSH操作ログの基本を理解しよう

そもそも操作ログって何が記録されるの?
SSH操作ログには、大きく分けて3種類のログがあります:
1. 認証ログ(誰がいつログインしたか)
- ログイン成功・失敗の記録
- 使用した認証方法(パスワード or 鍵認証)
- 接続元のIPアドレス
2. コマンドログ(何をしたか)
- 実行されたコマンドの内容
- コマンドの実行時刻
- 実行したユーザー名
3. セッションログ(画面の記録)
- ターミナルに表示された全ての内容
- 入力と出力の完全な記録
- タイムスタンプ付きの再生も可能
ログファイルの保存場所
主要なログファイルと場所:
ログの種類 | ファイルパス | 記録内容 |
---|---|---|
認証ログ(Ubuntu/Debian) | /var/log/auth.log | SSH接続の成功・失敗 |
認証ログ(CentOS/RHEL) | /var/log/secure | SSH接続の成功・失敗 |
システムログ | /var/log/syslog | システム全般の記録 |
コマンド履歴 | ~/.bash_history | 各ユーザーのコマンド履歴 |
今すぐできる!基本的なログ確認方法
ログイン履歴を確認する
最近のログイン情報を見る
last
表示例:
yamada pts/0 192.168.1.100 Mon Dec 4 10:30 still logged in
tanaka pts/1 203.0.113.1 Mon Dec 4 09:15 - 10:00 (00:45)
root pts/0 192.168.1.50 Mon Dec 4 08:00 - 08:30 (00:30)
ログイン失敗の履歴を確認
lastb
これで不正アクセスの試みを発見できます!
リアルタイムでログを監視
認証ログをリアルタイム監視
Ubuntu/Debian:
sudo tail -f /var/log/auth.log
CentOS/RHEL:
sudo tail -f /var/log/secure
新しいログが追加されると、画面に自動表示されます。
特定の情報を抽出する
SSH関連のログだけを表示
grep sshd /var/log/auth.log
特定IPアドレスからの接続を調べる
grep "192.168.1.100" /var/log/auth.log
ログイン失敗だけを抽出
grep "Failed password" /var/log/auth.log
コマンド実行ログを記録する方法
bashの履歴を強化する
通常の.bash_history
では不十分なので、設定を強化しましょう。
/etc/profile
に以下を追加:
# コマンド履歴の詳細記録
export HISTSIZE=10000
export HISTFILESIZE=10000
export HISTTIMEFORMAT="%Y/%m/%d %H:%M:%S "
export HISTCONTROL=ignoredups
# 即座に履歴を記録
export PROMPT_COMMAND='history -a'
# 履歴ファイルを保護
readonly HISTFILE
readonly HISTSIZE
readonly HISTFILESIZE
readonly HISTTIMEFORMAT
auditdで詳細な監査ログを取る
より本格的な監査にはauditd
を使います。
インストール方法
Ubuntu/Debian:
sudo apt-get install auditd audispd-plugins
CentOS/RHEL:
sudo yum install audit
監査ルールの設定
# 全てのコマンド実行を記録
sudo auditctl -a exit,always -F arch=b64 -S execve
# 特定のファイルへのアクセスを監視
sudo auditctl -w /etc/passwd -p wa -k passwd_changes
# 特定ユーザーの行動を監視
sudo auditctl -a always,exit -F uid=1000 -S execve -k user_commands
ログの確認方法
# 監査ログを見やすく表示
sudo aureport --executable
# 特定のキーワードで検索
sudo ausearch -k passwd_changes
セッション記録を完全に残す方法
scriptコマンドで画面を録画
手動でセッション記録を開始
script -t 2>時間記録.txt 操作記録.txt
終了する時はexit
と入力。
記録を再生する
scriptreplay 時間記録.txt 操作記録.txt
実際の操作がそのまま再現されます!
自動的にセッション記録を取る設定
/etc/profile
に追加:
# SSHログイン時に自動記録開始
if [ -n "$SSH_CLIENT" ]; then
LOG_DIR="/var/log/ssh-sessions"
mkdir -p $LOG_DIR
LOG_FILE="$LOG_DIR/$(date +%Y%m%d-%H%M%S)_${USER}_$(echo $SSH_CLIENT | awk '{print $1}').log"
script -q -f $LOG_FILE
exit
fi
ttyrec/ttyplayを使った高度な記録
インストール
# Ubuntu/Debian
sudo apt-get install ttyrec
# CentOS/RHEL
sudo yum install ttyrec
使い方
# 記録開始
ttyrec ログファイル名
# 再生
ttyplay ログファイル名
不正アクセスを検知する方法
怪しいアクセスパターンを見つける
大量のログイン失敗を検知
# ログイン失敗が多いIPアドレスTOP10
grep "Failed password" /var/log/auth.log | \
awk '{print $(NF-3)}' | \
sort | uniq -c | sort -rn | head -10
深夜のアクセスをチェック
# 0時〜6時のログインを抽出
grep "Accepted" /var/log/auth.log | \
awk '$3 ~ /^0[0-6]:/'
rootへの直接ログイン試行
grep "Failed password for root" /var/log/auth.log
fail2banで自動ブロック
インストール
# Ubuntu/Debian
sudo apt-get install fail2ban
# CentOS/RHEL
sudo yum install fail2ban
設定ファイル作成
/etc/fail2ban/jail.local
:
[sshd]
enabled = true
port = ssh
filter = sshd
logpath = /var/log/auth.log
maxretry = 3
findtime = 600
bantime = 3600
動作確認
# ブロック状況を確認
sudo fail2ban-client status sshd
# ブロックされたIPリスト
sudo fail2ban-client get sshd banned
ログ管理のベストプラクティス

ログローテーションの設定
/etc/logrotate.d/ssh-custom
:
/var/log/ssh-sessions/*.log {
daily
rotate 90
compress
delaycompress
missingok
notifempty
create 600 root root
}
外部サーバーへのログ転送
rsyslogで転送設定
/etc/rsyslog.conf
に追加:
# ログサーバーへ転送
*.* @@ログサーバーIP:514
# ローカルにも保存
& stop
ログの改ざん防止
# ログファイルを書き込み専用に
sudo chattr +a /var/log/auth.log
# 確認
lsattr /var/log/auth.log
便利なログ分析ツール
logwatch – 日次レポートを自動生成
インストールと設定
sudo apt-get install logwatch
# 日次レポートをメール送信
logwatch --detail high --mailto admin@example.com
GoAccess – リアルタイム分析
# SSH認証ログをリアルタイム分析
sudo goaccess /var/log/auth.log -o /var/www/html/ssh-report.html --real-time-html
Grafana + Prometheus – 可視化ダッシュボード
プロフェッショナルな監視環境を構築できます:
- グラフでログイン状況を可視化
- アラート機能で異常を即座に通知
- 複数サーバーを一元管理
コンプライアンス対応のログ管理
保存期間の設定
業界や規制によって異なりますが、一般的な目安:
ログの種類 | 推奨保存期間 | 理由 |
---|---|---|
認証ログ | 1年以上 | 不正アクセス調査用 |
コマンドログ | 3〜6ヶ月 | トラブルシューティング |
セッション記録 | 1〜3ヶ月 | 詳細調査用 |
ログへのアクセス制限
# ログディレクトリの権限設定
sudo chmod 750 /var/log/ssh-sessions
sudo chown root:adm /var/log/ssh-sessions
# 特定グループのみアクセス可能に
sudo usermod -a -G adm 監査担当ユーザー
トラブルシューティング
ログが記録されない場合
rsyslogサービスの確認
# サービス状態確認
sudo systemctl status rsyslog
# 再起動
sudo systemctl restart rsyslog
ディスク容量の確認
df -h /var/log
容量不足の場合は古いログを削除または圧縮。
ログファイルが巨大になった場合
# 大きなログファイルを探す
sudo find /var/log -type f -size +100M
# 圧縮して保存
gzip -9 大きなログファイル
セキュリティ重視の設定例
高セキュリティ環境の設定
# 1. 全操作を記録
echo 'session required pam_tty_audit.so enable=*' >> /etc/pam.d/sshd
# 2. ログを別サーバーにリアルタイム転送
echo '*.* @@ログサーバー:514' >> /etc/rsyslog.conf
# 3. ローカルログを暗号化
apt-get install ecryptfs-utils
# 4. 定期的な自動分析
crontab -e
0 * * * * /usr/local/bin/analyze_ssh_logs.sh
まとめ – プロフェッショナルなログ管理を実現しよう
お疲れさまでした!SSH操作ログについて、基礎から応用まで幅広く学んできました。
今日マスターした重要ポイント:
- 3種類のSSHログとその確認方法
- コマンドやセッションの完全記録方法
- 不正アクセスの検知と自動ブロック
- ログの長期保存と分析方法
- コンプライアンス対応の管理手法
ログ管理は地味な作業に思えるかもしれませんが、トラブル時には最強の味方になります。
次のステップ:
- まず基本的な認証ログの確認を習慣化
- auditdやscriptで詳細記録を開始
- fail2banで自動防御を設定
- 定期的なログ分析レポートを確立
「ログを制する者はサーバーを制す」
この言葉を胸に、安全で透明性の高いサーバー運用を実現してください!
何か問題が起きた時、きちんと記録されたログがあれば、必ず解決への道が見つかります。
コメント