LinuxでアクティブなSSH接続をすべて表示・確認する5つの方法
SSHは、ローカルマシンからリモートホストへログインして管理作業を行える、広く利用されているプロトコルです。本記事では、リモートホスト上のアクティブなSSH接続を確認するために使える、さまざまなコマンドを順番に紹介していきます。
注意: システムの設定によっては、ここで紹介する一部のコマンドを実行する際に、root権限またはsudo権限が必要になる場合があります。
1. whoコマンドを使う方法
アクティブなSSH接続を表示できる最初のコマンドが、whoコマンドです。
whoコマンドは、現在システムにログインしているユーザーを一覧表示するためのコマンドです。接続中のユーザーと、その接続元IPアドレスを簡単に確認できます。
使い方はとてもシンプルで、パラメータを付けずにwhoと入力するだけです。
上記の出力では、tty経由で接続しているdebianユーザー1人と、リモートIPアドレスからのSSHセッション2つが確認できます。
さらに、パラメータを追加することで、より詳細な情報を表示することも可能です。
たとえば、システムの最終起動時刻と各ユーザーの状態を一緒に表示したい場合は、-b -uフラグを付けます。
who -b -u
whoコマンドには他にも多数のオプションが用意されており、目的に応じて出力をカスタマイズできます。詳しくはmanページを参照してください。
2. wコマンドを使う方法
次に紹介するのは、サーバーに接続している各SSHセッションやユーザーの状態を表示できるwコマンドです。whoコマンドとは異なり、wコマンドでは各ユーザーが実行中のプロセスについて、より多くの情報を取得できます。
さらに、wコマンドはアイドル状態のSSH接続に関する情報も表示してくれます。不要になったセッションを切断したい場合に非常に便利な機能です。
オプションを指定せずに実行すると、以下のような出力が得られます。
上記の例では、wコマンドにより、ユーザー名、TTY方式、接続元IPアドレス、ログイン時刻、アイドル時間などの詳細情報が表示されています。
whoコマンドと同様に、wコマンドもさまざまなパラメータと組み合わせて使えます。主なパラメータは以下の表の通りです。
| パラメータ | 動作内容 |
|---|---|
| -h, --no-header | ヘッダー行を表示しないようにする |
| -u, --no-current | 接続ユーザーのプロセスとCPU時間を表示する際に、自分自身のユーザー名を無視する |
| -s, --short | ログイン時刻、JCPU、PCPUを除いた短縮形式の出力を表示する |
| -f, --from | 出力内のFROM項目の表示/非表示を切り替える |
| --help | wコマンドの各オプション/パラメータを表示して終了する |
| -v, --version | バージョン情報を表示して終了する |
| user | 指定したユーザーに結果を絞り込む |
次の例では、wコマンドに-sと-fパラメータを付けて、FROM部分を省略した簡潔な出力で現在のSSHセッションを表示しています。
あまり使われることはありませんが、環境変数やファイルを指定するパラメータと組み合わせることも可能です。これらのパラメータについて詳しく知りたい場合は、manページを参照してください。
3. lastコマンドを使う方法
lastコマンドを使っても、接続済みのSSHセッションをすべて表示できます。lastコマンドは、最近ログインしたユーザーの履歴リストを表示するコマンドです。
このコマンドは、指定されたログファイルを参照して動作します。たとえば「/var/log/wtmp」には、ファイル作成以降にログイン・ログアウトした全ユーザーの記録が蓄積されており、クライアントとサーバー間で確立されたSSHセッションの情報もそこから取得できます。
lastコマンドの基本的な構文は以下の通りです。
last
実行例はこちらです。
lastコマンドの出力は大量になりがちなので、grepコマンドと組み合わせて、アクティブなセッションだけを抽出して表示すると便利です。
例:
last | grep still
lastコマンドの出力形式を変更して、より詳細な情報を表示することもできます。
たとえば、省略されない完全なユーザー名とドメイン名を表示したい場合は、-wフラグを使用します。
last -w
lastコマンドは多数のオプションをサポートしています。特によく使われるオプションは以下の通りです。
| パラメータ | 動作内容 |
|---|---|
| -a, --hostlast | ホスト名を最後の列に表示する |
| -d, --dns | Linuxはリモートホストのホスト名とIPアドレスを記録している。このパラメータでIPアドレスをホスト名に変換して表示する |
| -file, --file | /var/log/wtmp以外の指定ファイルを読み込むようlastコマンドに指示する |
| -F, --fulltimes | ログイン・ログアウトの日付と時刻をすべて表示する |
| -i, --ip | --dnsと似ているが、ホスト名ではなくIPアドレス(数値)を表示する |
4. netstatコマンドを使う方法
netstatコマンドも忘れてはいけません。netstatは、すべてのネットワーク接続、ネットワークインターフェース、ルーティングテーブルなどを表示するために使われる定番ツールです。
netstatコマンドを使えば、Linuxサーバー上で確立済み(接続中)のSSHセッションだけをフィルタリングして表示することもできます。
netstat | grep ssh
上記のコマンドは、確立済みのSSH接続のみを表示します。
リスニング中・非リスニングを含むすべての接続を表示したい場合は、-aフラグを付けます。
netstat -a | grep ssh
5. ssコマンドを使う方法
接続中のSSHセッションについて、さらに詳しい情報を知りたい場合はssコマンドがおすすめです。ソケットデータを表示できるこのコマンドは、netstatと似た役割を果たします。
たとえば、ssコマンドに-aオプション(all)を付けてgrepすれば、接続中のSSHセッションをすべて表示できます。構文は以下の通りです。
ss -a | grep ssh
上記の出力には、リモートホスト上のすべてのSSH接続が表示されます。SSHDデーモン自体の接続も含まれる点に注意してください。
確立済みのSSH接続だけを絞り込みたい場合は、出力をさらにgrepにパイプしましょう。
ss -a | grep ssh | grep ESTAB
上記のコマンドは、アクティブなSSH接続のみを返します。
ssコマンドには他にも多数のオプションが用意されており、サーバーのアクティブな接続に関するさまざまな情報を調べられます。たとえば、-eフラグを使うと、ソケットの詳細情報を表示できます。
まとめ
リモートホストを定期的に監視し、不正なSSHログインがないかチェックすることは、サーバー運用における重要な習慣です。不審なアクセスが見つかった場合は、サーバーのセキュリティ強化やパスワード認証の無効化など、適切な対策を講じましょう。また、リバースSSHトンネリングを活用すれば、外部から自分のPCへの接続を安全に許可することも可能です。
-
Linuxホームサーバーを安全に守るための完全ガイド
ホームサーバーを構築する理由はたくさんあります。メディアサーバー、ファイルサーバー、あるいはローカルバックアップサーバーとして活用することもできるでしょう。基本的に、インターネット上に置く必要のないファイルは、すべてホームサーバー向きのデータだと言えます。最近ではLinuxを使ったホームサーバーの構築自体は比較的簡単になりました。しかし、そのサーバーを安全に保ち続けることは別問題です。セキュリティは重要であると同時に、決して簡単ではないテーマなのです。必要最小限のものだけをインストールするホームサーバーのセキュリティを維持する最も簡単な方法の一つは、最初の段階からセキュリティを意識することです
-
Linuxのssコマンドでネットワーク接続を監視する方法【基本から実践テクニックまで】
Linuxを使っていると、ネットワークの状態をもっと詳しく知りたい場面に必ず出会います。そうしたニーズに応えられるツールは数多く存在しますが、中には扱いが複雑なものもあります。ssコマンドは多くのLinuxマシンに標準でインストールされているため、その使い方を知っておくと非常に便利です。ssコマンドとは?2文字だけのコマンド名は一見謎めいて見えますが、実際はとてもシンプルです。多くのLinux/Unixコマンドと同じように、コマンド名はその機能を表す略語になっています。「ss」は「Socket Statistics(ソケット統計)」の略です。Socket Statisticsは、従来のnets