テクノロジーガイド

LinuxでアクティブなSSH接続を確認する方法

1 min read サーバー管理 更新されました 10 Oct 2025
LinuxでアクティブなSSH接続を確認する方法
LinuxでアクティブなSSH接続を確認する方法

サーバーとクライアント間のSSH接続を示す概念図

前提条件

  • Linuxが稼働するサーバー。
  • サーバー上でroot権限またはそれに準ずるsudo権限を持っていること。

重要: ネットワーク系コマンド(netstat/ss)はroot権限が無いとプロセス所有者や詳細が表示されないことがあります。

概要 — どのコマンドをいつ使うか

  • who / w: ログインユーザーや端末情報を簡潔に見たいとき。whoは最小限、wは稼働中のコマンドやアイドル時間も表示。
  • ps: sshdプロセスやPIDを確認してプロセス単位で対処したいとき。
  • netstat / ss: TCP接続レベルで確立済みの接続を確認する、IP/ポート視点の調査に便利。
  • last: /var/log/wtmpに基づくログ履歴から現在ログイン中(still logged in)を抽出する際に有用。

who コマンドでアクティブSSH接続を確認

whoは現在ログイン中のユーザー一覧を表示します。ターミナルで次を実行します。

who

期待される出力例:

root     pts/0        2020-05-01 02:37 (27.61.161.61)
root     pts/1        2020-05-01 02:39 (45.58.38.21)

解説: 各行はユーザー名、端末、ログイン時刻、接続元IPを示します。短く素早く確認したいときに便利です。

w コマンドでより詳細に確認

wはwhoより詳細を出力します。稼働中のプロセスや負荷情報も同時に見られます。

w

期待される出力例:

 02:40:07 up 1 day, 18:35,  2 users,  load average: 0.02, 0.02, 0.00
USER     TTY      FROM             LOGIN@   IDLE   JCPU   PCPU WHAT
root     pts/0    27.61.161.61     02:37    1.00s  0.04s  0.01s ssh [email protected]
root     pts/1    45.58.38.21      02:39    1.00s  0.02s  0.00s w

解説: WHAT列に現在実行中のコマンドが表示されます。負荷やアイドル時間を同時に把握できます。

ps コマンドでsshdプロセスを確認

sshdのプロセスとPIDを見て、特定の接続に対してプロセス操作(killなど)を行うときに使います。

ps auxwww | grep sshd: | grep -v grep

期待される出力例:

root         609  0.0  0.1  12160  7268 ?        Ss   Apr29   0:01 sshd: /usr/sbin/sshd -D [listener] 0 of 10-100 startups
root       35532  0.0  0.2  13864  8796 ?        Ss   02:37   0:00 sshd: root@pts/0
root       35669  0.0  0.2  13860  8916 ?        Ss   02:38   0:00 sshd: root@pts/1

解説: 各行にPIDがあるため、不要なセッションを個別に終了させる際に役立ちます。

注意: grepでプロセスを絞るときは表記ゆれに注意し、sshdの表示形式が環境により異なる場合があります。

netstat で確立済みのSSH接続を表示

netstatはネットワーク接続を表示します。確立済み(ESTABLISHED)のSSH接続を抽出するコマンド例:

netstat -tnpa | grep 'ESTABLISHED.*sshd'

期待される出力例:

tcp        0     88 45.58.38.21:22          27.61.161.61:8363       ESTABLISHED 35532/sshd: root@pt 
tcp        0      0 45.58.38.21:22          45.58.38.21:51166       ESTABLISHED 35669/sshd: root@pt 

解説: ローカルIP:ポート と リモートIP:ポート の組み合わせで表示されます。プロセス情報も同時に出力できます。

互換性メモ: recentなディストリでは netstat が非推奨で ss を使う場合が増えています。

last で現在ログイン中の履歴を確認

lastは /var/log/wtmp を参照してログイン/ログアウト履歴を表示します。現在「まだログイン中(still logged in)」なセッションを抽出する例:

last -a | grep -i still

期待される出力例:

root     pts/1        Fri May  1 02:39   still logged in    45.58.38.21
root     pts/0        Fri May  1 02:37   still logged in    27.61.161.61
reboot   system boot  Wed Apr 29 08:04   still running      5.4.0-26-generic

解説: 過去の接続履歴や再起動履歴を確認したいときに便利です。ログローテートやファイル破損で情報が欠落する場合があります。

ss コマンドで詳細なソケット情報を得る

ssはnetstatに似ていますが、より高速で詳細な情報を表示できます。

ss | grep -i ssh

期待される出力例:

tcp   ESTAB  0      0                      45.58.38.21:51166        45.58.38.21:ssh                                                                             
tcp   ESTAB  0      56                     45.58.38.21:ssh         27.61.161.61:8363                                                                            
tcp   ESTAB  0      0                      45.58.38.21:ssh          45.58.38.21:51166                                                                           

解説: 各接続の状態やローカル/リモートのポート情報を得られます。netstatよりも詳細なオプションが豊富です。

代替アプローチと応用例

  • journalctlでsshdログを追う: 接続エラーや鍵認証の失敗を調査する場合は systemd のログを参照します。
    • 例: sudo journalctl -u sshd -f
  • ファイアウォールログ確認: iptables/ufwのログに不審接続が記録されている場合があります。
  • IDS/ログ集約: 大規模環境ではfail2ban、SIEM、ログコレクタ(Fluentd/Elastic)で接続パターンを集計・可視化します。

いつこれらの方法が失敗するか(注意点)

  • /var/log/wtmp が壊れているかローテート後だと last の情報は不完全になります。
  • コンテナ化された環境やネットワーク名前空間では netstat/ss の出力がホストと異なることがあります。
  • 一部コマンドはroot権限がないとPID/プロセス所有者を表示しないため、表示が欠落します。

運用担当者向けチェックリスト

システム管理者:

  • who/w で現在ログイン中のユーザーを一覧化する
  • psで該当のsshdプロセスPIDを確認する
  • 必要なら該当PIDを安全に終了する(kill -15 → kill -9の順)

セキュリティ担当者:

  • netstat/ssで接続元IPとポートを抽出する
  • 不審IPはfail2banへ登録、またはファイアウォールで遮断する
  • 接続頻度や異常な成功/失敗ログはSIEMにアラート設定する

受け入れ基準

  • 実行者がwho/w/ss/psいずれかで現在のSSHログインを一覧できる。
  • 必要な情報(ユーザー名、端末、接続元IP、PID)が取得できる。
  • root権限が必要な情報については実行時に明示的にsudoを利用している。

テストケース/受け入れテスト例

  1. ユーザーAがSSHで接続している状態で who を実行し、ユーザーAのエントリが存在すること。
  2. 該当接続に対応するPIDが ps で見つかること。
  3. ss または netstat で該当接続が ESTABLISHED と表示されること。

簡易フローチャート(コマンド選択)

flowchart TD
  A[調査開始: 接続を一覧したい?] --> B{目的は何か}
  B --> |ユーザー一覧| C[who または w]
  B --> |プロセスPID| D[ps で sshd を確認]
  B --> |ネットワーク接続| E[ss または netstat]
  B --> |ログ履歴| F[last -a | grep -i still]
  C --> G[結果に応じて掘り下げ]
  D --> G
  E --> G
  F --> G

用語集(1行定義)

  • SSH: 安全にリモートログインするためのプロトコル。
  • sshd: SSHサーバープロセスの実装。
  • wtmp: ログイン/ログアウト履歴を保存するシステムファイル。

まとめ

本記事では、LinuxでアクティブなSSH接続を確認する主要なコマンド(who、w、ps、netstat、ss、last)と、それぞれの使い分けを解説しました。運用上はまず簡易的にwho/wで確認し、必要に応じてpsやssで詳細を掘り下げるフローが実用的です。ログやコンテナ環境では注意点があるため、実行権限や環境特性を考慮して使い分けてください。

重要: 直接プロセスを終了する前に影響範囲を必ず確認し、業務への影響がないことを確かめてください。

共有する: X/Twitter Facebook LinkedIn Telegram
著者
編集

類似の素材

Fedora 8 ローカル Yum リポジトリ構築ガイド
Linux

Fedora 8 ローカル Yum リポジトリ構築ガイド

Windowsでモノラルオーディオを有効にする
オーディオ

Windowsでモノラルオーディオを有効にする

Fallout 4をBorderlands風にするPC向け導入ガイド
ゲーム

Fallout 4をBorderlands風にするPC向け導入ガイド

iOS 16のバッテリー消耗を止める10の対策
テクノロジー

iOS 16のバッテリー消耗を止める10の対策

Windows: サポートされないディレクトリのエラーを修正
トラブルシューティング

Windows: サポートされないディレクトリのエラーを修正

iOS 15でApple Musicの歌詞が表示されない時の対処法
トラブルシューティング

iOS 15でApple Musicの歌詞が表示されない時の対処法