Wendov1.0 · iOS & Android
日本語

ガイド

スマホで Mosh と SSH のどちらを使うか: エージェントを見守るために

Claude Code に長いタスクを任せて、ノートパソコンを閉じて出かけます。電車がトンネルに入り、スマホが Wi-Fi からモバイル回線に切り替わって 1 分ほど圏外になり、もう一度見たときには SSH セッションが死んでいます。これは想定どおりの動作です。SSH は数分おきにネットワークを変えるクライアントのために設計されたものではなく、Mosh と Eternal Terminal はまさにそのために存在します。

ここでは、それぞれが何をするか、スマホで何が起こるか、どう選ぶかを説明します。ポケットからエージェントを動かすための全体像が知りたい場合は、まずスマホから Claude Code を使う方法から始めてください。

スマホで SSH に何が起こるか

SSH は TCP 接続の上で動き、その接続はひとつの IP アドレスとひとつのソケットの組に結びついています。スマホが Wi-Fi からモバイル回線に移ると IP が変わりますが、サーバーはそれに気づきません。接続はタイムアウトで切られるまでハングします。iOS や Android がバッテリー節約のためにアプリのネットワークを止めたときや、メモリが必要になってアプリを終了させたときも同じことが起こります。

失うのは画面だけではありません。その SSH セッションにぶら下がっているプロセスは SIGHUP を受け取り、一緒に終了することがあります。SSH シェルから直接起動したエージェントが壊れやすいのはこのためで、この記事の姉妹編である コーディングエージェントのための tmux がほぼ必須なのも同じ理由です。

Mosh: UDP と静かな再接続

Mosh(mobile shell)が SSH を使うのは、起動のときだけです。SSH で認証し、パソコン上で mosh-server を起動し、その後は UDP で通信します。切れる TCP 接続がないので、クライアントは IP が変わっても、電波を失っても、スリープしても、ネットワークが戻ればセッションはそのまま残っています。

実際には次のようになります。

  • Wi-Fi からモバイル回線に切り替えても、セッションは気づきません。
  • サーバーが応答しなくなっても、セッションを閉じずにアプリが知らせてくれます。
  • 予測つきのローカルエコー: 入力した文字は下線つきですぐ表示され、サーバーが応答すると確定します。遅延の大きいモバイル回線では違いを実感できます。

代償は次のとおりです。

  • パソコンで UDP 60000–61000 を開けておく必要があります(セッションごとにこの範囲から 1 ポートを使います)。
  • スクロールバックがありません。Mosh が同期するのは画面に表示されている内容だけです。エージェントが出力した内容を遡って読みたいなら、tmux の中で作業してください。
  • OS がアプリを終了させると Mosh セッションは終わり、再開できません。

Eternal Terminal: TCP だけれど再開できる

Eternal Terminal(ET)は逆の方向に進みます。TCP で、デフォルトではポート 2022 を使いますが、独自にセッションの状態を保持するので、接続が切れたら作り直し、取りこぼした分を再送します。パソコンで etserver が動いていることと、SSH セッションの PATH に etterminal があることが必要です。

スマホでの利点は、Wendo のトランスポートの中で、アプリを閉じても続くのがこれだけだということです。セッションはホームに表示され、開くと中断したところから再開します。Wendo は ET を実験的と表示しているので、頼る前にそのことを頭に入れておいてください。

簡単な比較

| | SSH | Mosh | ET |
|---|---|---|---|
| トランスポート | TCP | UDP | TCP (2022) |
| Wi-Fi ↔ モバイル回線 | 切れる | 続く | 続く |
| スマホがスリープ | 切れる | 続く | 続く |
| OS がアプリを終了 | 切れる | 失われる | 再開できる |
| スクロールバック | あり | なし | あり |
| Wendo で踏み台ホスト(Jump Host)経由 | 可 | 不可 | 不可 |

mosh-server のインストール

エージェントが動いているパソコンで実行します。

# macOS
brew install mosh

# Debian / Ubuntu
sudo apt install mosh

# Fedora
sudo dnf install mosh

インタラクティブなターミナルだけでなく、通常の SSH 接続の PATH にあることを確認してください。

ssh my-server 'which mosh-server'

Apple Silicon の Mac では、Homebrew は /opt/homebrew/bin/mosh-server に置きますが、非インタラクティブなセッションの PATH には入っていないことがあります。その場合、Wendo では接続の設定で mosh-server のパスを指定できます。

ファイアウォールの注意

Mosh には、受信方向の UDP 60000–61000 が必要です。Linux の ufw では次のようにします。

sudo ufw allow 60000:61000/udp

firewalld の場合:

sudo firewall-cmd --permanent --add-port=60000-61000/udp
sudo firewall-cmd --reload

パソコンがルーターの内側にあるなら、22 番ポートを転送するのと同じ要領で、この UDP の範囲も転送してください。ET も同様に、TCP 2022 を開けます(sudo ufw allow 2022/tcp)。

SSH がプロキシやロードバランサーを経由している場合、Mosh の UDP が間違った IP に送られることがあります。その場合のために、Wendo には「UDP にサーバー IP を使用」というオプションがあります。

Wendo での選び方

接続を編集するとき、トランスポート 欄で、自動、SSH、MOSH、ET を選べます。自動 では、Wendo はまず Mosh、次に ET を試し、どちらも使えなければ SSH に切り替えます。まずは自動で始めてください。

目安は次のとおりです。

  • スマホを持って歩き回り、セッションは数分で終わる: Mosh。
  • アプリを閉じて、1 時間後に戻ってもセッションがホームに残っていてほしい: ET。
  • 踏み台ホスト(Jump Host)経由で接続する: SSH。Wendo では Mosh も ET も踏み台ホストには対応していません。
  • パソコンで UDP ポートを開けられない: ET または SSH。

Mosh と Eternal Terminal は Wendo Pro の機能です。Pro がない場合、接続は SSH になります。各項目はセッションのドキュメントで説明しています。

どのトランスポートを選んでも、エージェントは tmux の中で起動してください。トランスポートは画面を生かし続け、tmux はプロセスを生かし続けて、Mosh にないスクロールバックを提供します。定番の組み合わせは、回線に Mosh か ET、作業に tmux です。必要な tmux の最小限はこちらにあります。エージェントが許可を求めたときに通知を受け取るには、フックを参照してください。