‘Broken Pipe’ の恐怖と Mosh による救済
SysAdmin(システム管理者)やエンジニアなら、ネットワーク切断にイライラした経験が一度はあるはずです。カフェの WiFi が不安定で、長いコマンドを打っている最中や設定ファイルを編集している途中に接続が切れることを想像してみてください。さらに悪いことに、PC を閉じてオフィスから自宅へ移動し、再び開いたときには SSH 画面がフリーズしている。結局、ターミナルを強制終了して最初から接続し直す羽目になり、大きなストレスを感じます。
私は 6 ヶ月間、本番環境のサーバー管理に Mosh を実際に使用してきましたが、これは間違いなく「必須」ツールだと言い切れます。Mosh (Mobile Shell) は単なる SSH の代替品ではなく、不安定なネットワーク環境における SSH 固有の弱点を根本から解決してくれます。
Mosh と従来の SSH の違いとは?
SSH の問題は TCP プロトコルにあります。TCP はクライアントとサーバー間の継続的な接続を必要とします。パケットがいくつか失われたり、IP アドレスが変わったり(WiFi から 4G への切り替えなど)するだけで、TCP 接続は即座に切断されてしまいます。
ローミング機能:ネットワークを切り替えても接続が切れない
Mosh は TCP の代わりに UDP を使用します。固定された接続に固執する代わりに、状態同期プロトコル (SSP) を採用しています。これにより、セッションを失うことなく自由に IP を変更できます。オフィスでコマンドを入力し、PC を閉じて、バスの中で 4G 回線から開き直しても、全く同じ場所から作業を続行できます。サーバー側は、正しい認証キーさえあれば、クライアントの IP が何であるかは気にしません。
Local Echo:タイピングの「ラグ」とおさらば
SSH では、入力した各文字が一度サーバーに送信され、その応答が画面に返ってきます。Ping 値が高いと、文字の表示が非常に遅く感じられます。Mosh はよりスマートで、入力を予測して即座に表示する「Local Echo」機能を備えています。Ping が 300〜500ms に跳ね上がったり、パケットロスが 10% 発生したりしても、タイピング体験はスムーズなままです。
サーバーとクライアントへの Mosh のインストール
Mosh を動作させるには、ローカルマシン (Client) とサーバー (Remote) の両方にインストールする必要があります。最初は SSH を使用して認証を行い、その後、通信を維持するためにランダムなポートで UDP サーバーを自動的に起動します。
ステップ 1:ファイアウォールのポート開放(非常に重要)
インストールしても接続できない原因の多くは、UDP ポートの開放忘れです。Mosh はデフォルトで 60000 から 61000 のポート範囲を使用します。これは、私が Linux VPS 群を管理する中で得た教訓です。
UFW (Ubuntu/Debian) の場合:
sudo ufw allow 60000:61000/udp
sudo ufw reload
Firewalld (CentOS/RHEL/AlmaLinux) の場合:
sudo firewall-cmd --permanent --add-port=60000-61000/udp
sudo firewall-cmd --reload
ステップ 2:サーバーへのインストール
Ubuntu または Debian 系:
sudo apt update && sudo apt install mosh -y
RHEL、AlmaLinux または Fedora 系:
sudo dnf install epel-release -y
sudo dnf install mosh -y
ステップ 3:個人 PC(クライアント)へのインストール
macOS を使用している場合、Homebrew を使うのが最も速い方法です:
brew install mosh
Windows の場合、最高のパフォーマンスを得るために Windows Subsystem for Linux (WSL) または MobaXterm の使用をお勧めします。
実戦での Mosh の使い方
Mosh の構文は SSH とほぼ同じなので、慣れるのに時間はかかりません。
基本接続
mosh user@server-ip
Mosh は SSH パスワードまたは SSH キーを要求します。ログイン後は、ターミナルのレスポンスが格段に速くなっていることに気づくでしょう。
SSH ポートを変更している場合の接続
実際には、ボットのスキャンを避けるために SSH ポートを変更している(例:2222)ことが多いでしょう。その場合は --ssh パラメータを使用します:
mosh --ssh="ssh -p 2222" user@server-ip
長期利用における重要な注意点
強力なツールですが、戸惑わないためにいくつか注意すべき点があります:
- スクロールバック (Scrollback) の制限: Mosh は SSH のようにスクロール履歴を保持しません。解決策は Tmux と組み合わせることです。Tmux が履歴の保存を担い、Mosh が接続の維持を担当します。
- UDP のブロック: 一部の非常に厳しい社内ネットワークなどでは、UDP 通信がすべて遮断されている場合があります。その場合、Mosh は機能しないため、SSH に戻る必要があります。
- Unicode: Mosh は UTF-8 を標準でサポートしており、アイコンや特殊文字の表示も非常に安定しています。
ヒント: サーバーに入ると同時に以前のセッションを自動的に再開するには、次のコマンドを使用します:mosh user@server-ip -- tmux a || tmux
この組み合わせを使えば、セッション切れを心配することなく、長期間作業を続けることも可能です。
結論
Mosh は小さなツールですが、非常に大きな問題を解決してくれます。移動が多い方や、不安定な WiFi 環境で作業する方は、今すぐ Mosh をインストールしてみてください。サーバー管理のストレスが軽減され、よりプロフェッショナルな作業が可能になります。ターミナル作業中のネットワーク切断の不安は、すぐに過去のものとなるでしょう。

