SSHログイン履歴の確認方法|Linuxで不審なアクセスを調べるコマンド
SSHでLinuxサーバーを管理している場合、定期的にログイン履歴を確認しておくことが大切です。
自分が接続した覚えのない時間帯にログインされていたり、見知らぬIPアドレスから何度も認証に失敗していたりする場合、不正アクセスの可能性があります。
Linuxでは、last や lastb、journalctl などのコマンドを使うことで、SSHのログイン成功・失敗の記録を調べられます。
ここでは、実際の確認コマンドとログの見方、不審なアクセスを見つけたときの対応方法を順番に紹介します。
SSHのログイン履歴を確認する方法
Linuxでは、ログイン履歴の種類によって使用するコマンドが異なります。
まずは、次の3つを覚えておくと便利です。
| コマンド | 確認できる内容 |
|---|---|
last | ログイン成功の履歴 |
lastb | ログイン失敗の履歴 |
journalctl | SSHサービスの詳細なログ |
それぞれ記録される情報や保存場所が異なるため、複数の方法を組み合わせて確認すると、より詳しく状況を把握できます。
1. lastコマンドでログイン成功履歴を確認する
last は、Linuxに保存されているログイン履歴を表示するコマンドです。
SSH接続によるログインだけでなく、コンソールなどからのログイン履歴も表示されます。
まずは次のコマンドを実行します。
last実行すると、次のような情報が表示されます。
username pts/0 203.0.113.10 Mon Sep 28 10:15 still logged in
username pts/1 198.51.100.5 Sun Sep 27 18:30 - 19:10
reboot system boot Sun Sep 27 08:00※上記は表示形式を説明するためのサンプルです。IPアドレスや日時は実際の環境とは異なります。
主な項目は次のとおりです。
- username:ログインしたユーザー名
- pts/0:SSHなどで利用される仮想端末
- IPアドレス:接続元のアドレス
- ログイン日時:接続した日時
- still logged in:現在もログイン状態であることを示す表示
- reboot:サーバーの起動履歴
特に確認したいのは、ユーザー名・接続元IPアドレス・ログイン日時の3つです。
自分が利用していない時間帯や、見覚えのないIPアドレスからログインしていないか確認しましょう。
表示件数を指定する
履歴が多い場合は、-n オプションで表示件数を制限できます。
last -n 20直近20件のログイン履歴が表示されます。
また、特定のユーザーだけを確認したい場合は、ユーザー名を指定します。
last usernameusername の部分を調べたいユーザー名に置き換えてください。
2. lastbコマンドでログイン失敗履歴を確認する
不正アクセスの兆候を調べる場合、ログインに成功した記録だけでなく、認証に失敗した履歴も重要です。
Linuxでは、lastb コマンドを使ってログイン失敗の履歴を確認できます。
sudo lastb実行すると、認証に失敗したユーザー名や接続元IPアドレス、日時などが表示されます。
表示例:
root ssh:notty 203.0.113.20 Mon Sep 28 11:30 - 11:30
admin ssh:notty 203.0.113.20 Mon Sep 28 11:29 - 11:29
test ssh:notty 203.0.113.20 Mon Sep 28 11:28 - 11:28この例では、同じIPアドレスから異なるユーザー名でログインを試みていることが分かります。
このような記録が短時間に何度も続いている場合、パスワードを推測するブルートフォース攻撃などの可能性があります。
ただし、ログイン失敗が記録されているだけで、必ずしも不正アクセスが成功したとは限りません。
lastbで履歴が表示されない場合
lastb は、通常 /var/log/btmp に保存された記録を読み取ります。
環境によっては、このファイルが存在しない、または記録されていない場合があります。
確認するには、次のコマンドを実行します。
sudo ls -l /var/log/btmpファイルが存在しない場合や、履歴が保存されていない場合は、lastb に何も表示されないことがあります。
また、ログの保存設定やローテーションによって、古い記録が残っていない場合もあります。
3. journalctlでSSHのログを確認する
last と lastb だけでは、認証に失敗した理由やSSHサービスの詳しい動作までは分からないことがあります。
そのような場合は、journalctl を使ってSSH関連のログを確認します。
まず、SSHサービスのログを表示します。
UbuntuやDebianでは、次のコマンドが使えます。
sudo journalctl -u sshRHEL系など、サービス名が sshd の環境では次のように実行します。
sudo journalctl -u sshdサービス名はLinuxディストリビューションや環境によって異なります。
直近のログだけを確認する
ログが大量にある場合は、-n オプションを使うと便利です。
sudo journalctl -u ssh -n 50直近50件のログを表示します。
リアルタイムでログを確認したい場合は、次のコマンドを実行します。
sudo journalctl -u ssh -fSSH接続を試したときに、どのようなログが記録されるか確認できます。
認証に失敗した記録を探す
SSHログの中から、認証失敗に関係する記録を検索するには、次のように実行します。
sudo journalctl -u ssh | grep -i "failed"RHEL系などでは、次のように指定します。
sudo journalctl -u sshd | grep -i "failed"認証に失敗したユーザー名や接続元IPアドレスなどを確認できる場合があります。
ただし、ログの形式や記録される内容はSSHの設定やディストリビューションによって異なります。
4. ログファイルからSSHの履歴を確認する
Linuxでは、ディストリビューションによってSSH関連のログが保存されるファイルが異なります。
代表的な保存先は次のとおりです。
| ディストリビューション | 主なログファイル |
|---|---|
| Ubuntu・Debian | /var/log/auth.log |
| RHEL・Rocky Linux・AlmaLinux | /var/log/secure |
UbuntuやDebianの場合は、次のコマンドでSSH関連の記録を確認できます。
sudo grep "sshd" /var/log/auth.logRHEL系の場合はこちらです。
sudo grep "sshd" /var/log/secure認証失敗の記録を検索する
次のように Failed password を検索すると、パスワード認証に失敗した記録を探せます。
sudo grep "Failed password" /var/log/auth.logRHEL系の場合:
sudo grep "Failed password" /var/log/secure一方、認証に成功した記録は、次のように検索できます。
sudo grep "Accepted" /var/log/auth.logRHEL系の場合:
sudo grep "Accepted" /var/log/secureログの内容によっては、公開鍵認証やパスワード認証など、どの方法でログインしたかも確認できます。
ログがローテーションされている場合
ログファイルは、容量が増えすぎないように古いものがローテーションされることがあります。
そのため、現在の auth.log や secure に古い記録が残っていない場合もあります。
圧縮された過去のログを調べる場合は、次のように zgrep を使います。
UbuntuやDebianの例:
sudo zgrep "sshd" /var/log/auth.log*RHEL系の例:
sudo zgrep "sshd" /var/log/secure*ただし、ログの保存期間や圧縮方法は環境によって異なります。
5. 不審なSSHアクセスを見つけるポイント
ログを確認するときは、単に失敗回数を見るだけでなく、次のような点にも注目しましょう。
見覚えのないIPアドレスからログインしている
自分や管理者が利用していないIPアドレスからログイン成功の記録がある場合は、慎重に確認する必要があります。
ただし、IPアドレスは固定とは限りません。自宅の回線やモバイル回線、VPNなどを利用していると、以前と異なるIPアドレスで接続することがあります。
まずは、接続した可能性のあるユーザーや管理者に確認しましょう。
短時間に大量のログイン失敗がある
同じIPアドレスから、異なるユーザー名を使ったログイン失敗が繰り返されている場合は注意が必要です。
特に、root、admin、test などのアカウント名を次々に試している記録は、不正なログイン試行の可能性があります。
普段使っていないユーザーでログインしている
管理用アカウント以外のユーザーでログイン成功の記録がある場合は、そのユーザーが必要なものか確認してください。
利用していないアカウントや、身に覚えのないユーザーが存在する場合は、ユーザー一覧も確認しましょう。
cat /etc/passwdただし、システム用のユーザーも一覧に表示されるため、知らない名前があるだけで不正と判断しないようにしてください。
ログイン成功と失敗の記録を照合する
失敗したログイン試行があった後に、同じIPアドレスからログイン成功の記録がないか確認することも重要です。
例えば、短時間に大量の認証失敗があり、その後に同じ接続元からログイン成功が記録されている場合は、優先して調査する必要があります。
6. 不審なログインを確認したときの対処方法
見覚えのないログイン成功や、不自然な認証記録を見つけた場合は、慌ててログを削除するのではなく、まず状況を保存して確認しましょう。
① ログを保存する
調査に必要な記録を別の場所に保存します。
例えば、UbuntuやDebianの場合は次のように実行できます。
sudo cp /var/log/auth.log ~/auth-log-backup.logRHEL系の場合:
sudo cp /var/log/secure ~/secure-log-backup.log調査対象のログがローテーションされている場合は、関連する過去のログも保存しておきましょう。
② 接続元IPアドレスを確認する
不審なアクセスの接続元IPアドレスを確認し、管理者や利用者の接続元と一致しないか調べます。
不審なIPアドレスを見つけても、すぐに無関係なIPだと決めつけないことが大切です。
クラウド環境やVPN、社内ネットワークなどを経由している可能性もあります。
③ 不審なアカウントと認証情報を確認する
不正ログインの可能性がある場合は、対象ユーザーの利用状況や認証設定を確認します。
必要に応じて、パスワードの変更やSSH公開鍵の見直しを行ってください。
また、秘密鍵が漏えいした可能性がある場合は、該当する鍵を無効化し、新しい鍵へ切り替える必要があります。
④ SSHのアクセス制御を見直す
今後の不正アクセスを防ぐため、SSHの設定も確認しましょう。
例えば、次のような対策があります。
- パスワード認証を無効にし、公開鍵認証を利用する
- rootユーザーによる直接ログインを制限する
- 必要なユーザーだけにSSH接続を許可する
- ファイアウォールで接続元IPアドレスを制限する
- 必要に応じてFail2banなどの防御ツールを導入する
ただし、SSH設定を変更すると、自分自身も接続できなくなる可能性があります。
設定変更前には現在の接続を維持し、別の端末から接続できることを確認してから作業してください。
7. SSHログイン履歴を定期的に確認する
SSHのログイン履歴は、問題が起きたときだけでなく、定期的に確認する習慣をつけると安心です。
例えば、次のような確認を定期的に行うとよいでしょう。
| 確認項目 | 使用するコマンド |
|---|---|
| ログイン成功履歴 | last |
| ログイン失敗履歴 | sudo lastb |
| SSHサービスのログ | sudo journalctl -u ssh |
| 認証失敗の検索 | grep "Failed password" |
| 認証成功の検索 | grep "Accepted" |
UbuntuやDebianでは ssh、RHEL系では sshd というサービス名が使われる場合があります。
また、ログの保存期間やローテーション設定によって、確認できる履歴の範囲は変わります。
定期的に確認することで、不自然なログイン試行や普段と異なる接続を早めに発見しやすくなります。
まとめ
LinuxサーバーのSSHログイン履歴を確認するには、last、lastb、journalctl などのコマンドが役立ちます。
last:ログイン成功の履歴を確認lastb:ログイン失敗の履歴を確認journalctl:SSHサービスの詳細なログを確認auth.log・secure:認証関連の記録を確認
特に重要なのは、ログイン成功の記録と失敗の記録を両方確認することです。
不審なIPアドレスや見覚えのないログインがあった場合は、すぐに記録を保存し、接続元や対象ユーザー、認証情報を確認してください。
SSHのログを定期的にチェックすることは、Linuxサーバーを安全に運用するための基本的なセキュリティ対策の一つです。
SSHとは?サーバーに安全に接続する仕組みを初心者向けに解説
SSH接続とは?初心者向けに仕組みと「必須のセキュリティ設定3選」を解説
SSH接続できないときの確認方法|Connection refused・Timeout・Permission deniedの原因を解説
