SSH切断の悩み:なぜマルチプレクサが必要なのか
Linux管理者なら誰しも経験があるはずです。100GBもの大規模なデータベース移行や複雑なカーネルのビルドを始めて45分が経過したその時、オフィスのWi-Fiが数秒間途切れます。SSH接続が切れ、ターミナルはフリーズし、実行中だったプロセスは即座に終了してしまいます。壊れたプロンプトを前に、データが破損していないか、スクリプトが最後まで走りきったのかと途方に暮れることになります。
Tmux(Terminal Multiplexer)は, こうした災難に対する保険です。ターミナルとシェルの間に位置し、サーバー上に永続的な環境を作成します。接続が切れても、セッションはサーバーのメモリ内で生き続けます。再度ログインしてアタッチコマンドを実行するだけで、カーソルを離れた時の状態のまま再開できます。
また、生産性を大幅に向上させるツールでもあります。ローカルターミナルで15個ものSSHタブを開く代わりに、一つのウィンドウ内ですべてを管理できます。画面を4つのペインに分割し、ログの監視、設定の編集、CPU使用率のチェックを同時に行うことが可能です。50台以上のLinux VPSインスタンスを管理してきた経験から、堅牢なTmuxのワークフローはリモート管理における最大の時短テクニックだと言えます。
インストール:サーバーにTmuxを導入する
Tmuxは非常に軽量で(バイナリは通常1MB未満)、主要なリポジトリのすべてで利用可能です。ローカルマシンだけでなく、リモートサーバーにもインストールしておきましょう。
Ubuntu / Debian
sudo apt update && sudo apt install tmux -y
RHEL / CentOS / AlmaLinux
sudo dnf install tmux -y
Arch Linux
sudo pacman -S tmux
インストールが完了したらバージョンを確認します:
tmux -V
プロレベルの設定を構築する
デフォルトのTmuxは少し使いにくい部分があります。例えば、標準のプレフィックスキーは Ctrl+b です。これは指を大きく伸ばす必要があり、操作が遅くなります。多くのパワーユーザーは、小指で押しやすい Ctrl+a に即座に割り当てを変更します。
ホームディレクトリに設定ファイルを作成して、カスタマイズを行いましょう:
nano ~/.tmux.conf
以下の実戦的な設定を貼り付けてください。マウスサポート、カラー改善、直感的なペイン分割機能が追加されます:
# プレフィックスを 'Ctrl+b' から 'Ctrl+a' に変更
unbind C-b
set-option -g prefix C-a
bind-key C-a send-prefix
# スクロールとリサイズのためにマウスモードを有効化
set -g mouse on
# | と - でペインを分割(垂直/水平の視覚的なヒント)
bind | split-window -h
bind - split-window -v
unbind '"'
unbind %
# Alt + 矢印キーでペインを素早く切り替え(プレフィックス不要)
bind -n M-Left select-pane -L
bind -n M-Right select-pane -R
bind -n M-Up select-pane -U
bind -n M-Down select-pane -D
# UIの調整
set -g default-terminal "screen-256color"
set -g status-bg colour235
set -g status-fg colour136
set -g status-left "#[fg=green]セッション: #S #[default]"
現在のセッションを終了せずにこれらの変更を適用するには、Tmux内で次のコマンドを実行します:
tmux source-file ~/.tmux.conf
ヒント:mouse on を有効にすると、マウスでのテキストコピーが難しくなる場合があります。その場合は、Shift キーを押しながらテキストを選択することで、Tmuxをバイパスしてローカルシステムのクリップボードを使用できます。
多忙なエンジニアのためのセッション管理
ただ tmux を実行して成り行きに任せるのではなく、セッションに名前を付けることが、複数のプロジェクトを並行して進める際の整理の鍵となります。
名前付きセッションの作成
# Nginx作業用のセッションを開始
tmux new -s nginx_config
# 長時間実行するバックアップスクリプト用のセッションを開始
tmux new -s backup_job
もし接続が切れた場合は、サーバーに再接続して実行中のセッションを確認します:
tmux ls
作業に戻るには、アタッチコマンドを使用します:
tmux attach -t nginx_config
必須ショートカットのチートシート
上記の設定を使用している場合、プレフィックスは Ctrl+a になっています。よく使うキー操作は以下の通りです:
- Prefix + d: デタッチ(セッションはバックグラウンドで継続)
- Prefix + |: 画面を垂直分割
- Prefix + –: 画面を水平分割
- Prefix + c: 新しいウィンドウ(タブ)を開く
- Prefix + x: 現在のペインを閉じる
監視とメンテナンス
あまりに多くのセッションを実行すると、システムが煩雑になります。気づかないうちに、何十ものアイドル状態のシェルがメモリを消費していることもあります。専用の「ダッシュボード」セッションを用意することをお勧めします。私は通常、画面を3つに分割しています。1つはRAM監視用の htop、1つはログイン試行を監視する tail -f /var/log/auth.log、そしてもう1つを実際のシェル作業用に使っています。
Tmuxの中でどのようなプロセスが動いているか正確に確認するには、次のコマンドを使用します:
ps -ef f | grep tmux
これにより、すべてのサブプロセスのツリービューが表示されます。セッションが応答しなくなった場合や、整理したい場合は、外部から終了させることができます:
tmux kill-session -t backup_job
ステータスバーの視覚的なインジケーター(セッション: #S)は非常に便利です。単純なことですが、これにより本番環境のセッションで、ステージング環境だと勘違いして破壊的な rm -rf を実行してしまうのを防げます。重大なコマンドでEnterキーを押す前に、必ずステータスバーを確認しましょう。Tmuxは、ターミナルを不安定な接続から、ネットワークの瞬断にも耐えうる堅牢で整理されたワークスペースへと変えてくれます。

