MENU

同時接続中の端末セッションを特定して安全に管理する実務手順

複数のSSH接続が並走している環境では、「今自分がどの端末にいるか」「別窓のセッションは誰のものか」を瞬時に把握できないと、誤ったウィンドウで危険なコマンドを実行するリスクがあります。まず結論から示します。現在の端末デバイスを確認するには tty を、全セッションを一覧するには who または loginctl を使います。

目次

今いる端末デバイスを1コマンドで確認する

tty を実行すると、現在のセッションが紐づいている端末デバイスのパスが表示されます。

$ tty
/dev/pts/2

/dev/pts/2 は擬似端末(Pseudo Terminal Slave)のデバイスファイルです。SSH接続やターミナルエミュレータからのセッションはすべてこの /dev/pts/* 配下に割り当てられます。番号はセッションごとに異なるため、複数ウィンドウを開いているとき「自分は pts/2、別ウィンドウは pts/5」のように区別できます。

コンソール(物理端末やシリアル接続)からログインしている場合は /dev/tty1 などが返ります。スクリプト内でコマンドの出力先が端末かどうかを判定したいときも tty -s(サイレントモード)の終了コードを使います。

# 端末かどうかを判定する例(シェルスクリプト内)
if tty -s; then
  echo "端末から実行されています"
else
  echo "パイプまたはリダイレクト経由です"
fi

全ログインセッションを一覧で把握する

サーバー全体に誰がどの端末でログインしているかは who または w で確認します。

$ who
alice    pts/0        2026-08-09 10:12 (192.168.1.10)
bob      pts/2        2026-08-09 10:45 (192.168.1.20)
root     pts/4        2026-08-09 11:03 (192.168.1.10)

w はさらに各セッションで現在実行中のコマンドも表示します。負荷状況の把握と組み合わせて使えます。

$ w
 11:05:32 up 12 days,  3:21,  3 users,  load average: 0.12, 0.08, 0.05
USER     TTY      FROM             LOGIN@   IDLE JCPU   PCPU WHAT
alice    pts/0    192.168.1.10     10:12    8:00   0.02s  0.01s -bash
bob      pts/2    192.168.1.20     10:45    1:30   0.05s  0.03s vim /etc/nginx/nginx.conf
root     pts/4    192.168.1.10     11:03    0.00s  0.01s  0.00s w

IDLE列が長い(長時間放置されている)セッションは、作業途中で切断された可能性があります。孤立セッションの特定に役立ちます。

systemd環境でのセッション管理

RHEL 9系・Ubuntu 22.04以降など、systemd-logind が動いている環境では loginctl でより詳細なセッション情報を取得できます。

# セッション一覧
$ loginctl list-sessions
SESSION  UID  USER   SEAT  TTY
      3 1001  alice        pts/0
      7 1002  bob          pts/2
     12    0  root         pts/4

3 sessions listed.

# 特定セッションの詳細
$ loginctl show-session 7
Id=7
User=1002
Name=bob
Timestamp=Sat 2026-08-09 10:45:31 JST
Service=sshd
Type=tty
Class=user
Active=yes
State=active
...

# セッションを強制終了する(要root権限)
$ loginctl terminate-session 7

loginctl terminate-session はセッション全体をクリーンに終了させます。単純に kill でSSHプロセスを落とすより、systemd-logindが管理するリソースも合わせて解放されるため、現代の環境ではこちらが推奨されます。

端末デバイスとプロセスの紐づきを確認する

「このプロセスはどのセッションから起動されたか」を確認したいときは psTT(または TTY)列を見ます。

# 全プロセスの端末割り当てを確認
$ ps aux | awk '{print $7, $11}' | sort | head -20

# 特定端末(pts/2)に紐づくプロセスだけ絞り込む
$ ps -t pts/2
  PID TTY          TIME CMD
 8423 pts/2    00:00:00 bash
 9101 pts/2    00:00:02 vim

TTY列が ? のプロセスは端末を持たないデーモンです。孤立したバックグラウンドプロセスの調査にも使えます。

ある運用現場では、深夜バッチのログ調査中に ps -t pts/0 で確認したところ、終了したはずのスクリプトが別セッションで生き残っていたことが発覚した事例があります。端末とプロセスの対応を把握しておくことで、このような「幽霊プロセス」を早期に発見できます。

端末間でメッセージを送る

同じサーバーに複数人がログインしているとき、特定の端末に直接メッセージを送ることもできます。ペアオペレーション中に口頭連絡なしで作業状況を共有したい場面で役立ちます。

# bob の pts/2 にメッセージを送る(bob の mesg が y になっている必要あり)
$ write bob pts/2
作業完了しました。pts/4 でリロード確認お願いします。
^D  # Ctrl+D で送信終了

# 全ユーザーにブロードキャスト(root のみ)
$ wall "15分後にメンテナンスのためログアウトをお願いします"

受信を拒否したい場合は mesg n を実行します。デフォルトでは多くのディストリビューションで mesg n(拒否)になっているため、write を使うには相手が事前に mesg y を設定しておく必要があります。wall は root が送った場合に限り、mesg n 設定のユーザーにも届きます。

注意点と実務での使い方まとめ

端末セッションの管理で押さえておきたいポイントをまとめます。

  • セッション確認は操作前の習慣に:複数ウィンドウで作業するときは、危険なコマンドを打つ前に ttyhostname で今いる環境を確認する習慣をつけると誤操作を防げます。
  • loginctl terminate-session は慎重に:該当セッションで実行中の作業がある場合、強制終了されます。特に root セッションを終了するときは、別の root セッションが残っているかどうかを必ず確認してください。
  • tmux/screen との組み合わせtmuxscreen を使うと、SSH切断後もセッションを保持できます。tty で確認できる端末は tmux のウィンドウごとに異なる pts 番号が割り当てられるため、デタッチ・アタッチ操作でも端末管理の考え方は同様です。
  • コンテナ環境では挙動が変わる:Docker コンテナや Kubernetes Pod 内では ttynot a tty を返すケースがあります。-t(TTY割り当て)オプションの有無によって動作が変わることを念頭に置いてください。

端末デバイスの仕組みを理解しておくと、セッション管理・プロセスの帰属確認・安全な多人数運用の基盤になります。ttywhologinctl の順で確認する流れをルーティン化するだけで、マルチセッション環境での誤操作リスクを大きく下げられます。

<PR>この記事に関連するおすすめ書籍

新しいLinuxの教科書 第2版

コマンド操作から基本的な運用までを手を動かしながら体系的に学べる定番書。地力を固めたい方に。

「コマンドは打てる。次は”現場で通用する型”を最短で身につけたい」——そんなあなたへ。

ネットの断片的なTipsをコピペするだけでは、体系的な運用スキルはなかなか積み上がりません。リナックスマスター.JPの無料メルマガ「リナマガ」では、現場で実際に使うLinuxサーバー運用の考え方を、順を追って実務目線でお届けしています。いま登録された方には、安全なサーバー構築の「型」をまとめた『Linuxサーバー構築入門マニュアル(図解60P)』を完全無料でプレゼント中です。

>> 図解60P『Linux入門マニュアル』を無料で受け取る
(メルマガ登録は10秒・いつでも解除OK)

※ 「独学の時間がもったいない」「プロから現場の技術を最短で学びたい」という本気の方には、2日で実務レベルが身につく初心者向けハンズオンセミナーもご用意しています。

よかったらシェアしてね!
  • URLをコピーしました!
  • URLをコピーしました!

この記事を書いた人

目次