SSHはサーバー管理のデファクトスタンダードですが、スマートフォンで使う場合、Wi-Fiからモバイル回線への切り替えや画面のロックのたびに接続が切断されてしまいます。Moshを使えば、ネットワークが切り替わってもセッションが維持され、ネットワーク遅延がある環境でもタイピングした文字が瞬時に画面へ反映されます。なお、MoshはSSHを完全に置き換えるものではありません。ログイン認証にはSSHを使用し、その後の通信をUDPで行う仕組みになっています。

SSHの仕組みとMoshがもたらすメリット

SSHはサーバーとの間に暗号化されたTCP接続を確立します。そのため、スマホのIPアドレスが変わると接続が切れ、ログインし直さなければなりません。一方、Mosh(mobile shell)はまずSSH経由でログインしてサーバー側でmosh-serverを起動し、以降のセッションをUDP上でやり取りします。これにより、次の3つのメリットが得られます。

  1. ローミング:ネットワークやIPアドレスが変わってもセッションが途切れません。
  2. 予測ローカルエコー:入力した文字が遅延なく即座に表示され、サーバーの応答とズレがあった場合も自動で修正されます。
  3. スリープ復帰後の自動再接続:スマホのロックを解除すれば、中断したところからそのまま作業を再開できます。
SSHMosh
トランスポートTCPUDP(初回接続はSSH経由)
Wi-Fiとモバイル通信の切り替え切断される維持される
使用ポート22/TCP(または指定したポート)ログイン用22/TCP + UDP 60000〜61000
ポートフォワーディングとX11対応非対応
ウィンドウリサイズ時のテキスト再調整対応非対応(mosh-serverが未対応)

情報源:mosh.org、man mosh(2026年10月18日確認)。

Moshを使うべきではないケース

  • SSHトンネルやポートフォワーディングが必要な場合:Moshはこれらに対応していません。
  • ファイアウォールやネットワークでUDP 60000〜61000番ポートがブロックされている場合:-pオプションで特定のポートに固定できますが、該当ポートの開放が必要です。
  • サーバー側にmosh-serverがインストールされておらず、導入もできない場合(Debian/Ubuntuならsudo apt install mosh、macOSならbrew install moshで導入可能)。

termi1でのMoshの使い方

termi1は、iPhone、iPad、Android向けに公式のmosh-clientを組み込んでおり、独自実装ではありません。接続設定画面ではSSHがデフォルトとなっており、スイッチを切り替えるだけでMoshを利用できます。また、mosh-serverが出力するMOSH CONNECT …の文字列を直接貼り付けて接続することも可能です。サーバーにMoshがインストールされていない場合は、エラーで黙って終了するのではなく、アプリが通知したうえでSSH接続を継続します。セッションはtmux内で実行されるため、途中でアプリを離れても実行中のプロセスが消えることはありません。

管理対象のサーバーがMacの場合は、メニューバー常駐型の無料アプリtermi1 Companion(macOS 14以降対応)が便利です。Appleの公証・署名を受けたDMGファイルとしてtermi1.comからダウンロードできます(Mac App Storeでは配信していません)。主な機能は次の3つです。

  • リモートログイン、mosh-server、tmuxが有効になっているかを確認します。Moshが未導入の場合は、brew install moshが入力された状態でターミナルを開きます(自動実行はされません)。
  • 6桁のコードを使ってiPhoneやiPadと簡単にペアリングできます。スマホ側から公開鍵が送信され、コピペの手間なく~/.ssh/authorized_keysへ自動登録されます。
  • 通知機能を有効にすると(初期設定はオフ)、tmuxでバックグラウンド実行していた長時間の処理が完了した際にMac上で通知を受け取れます。

よくある質問

MoshはSSHの代わりになりますか?

完全な代用にはなりません。Moshは認証とサーバー側でのmosh-serverの起動にSSHを利用します。その後の通信はUDPへ移行しますが、SSHの鍵や設定はそのまま使われます。そのため、サーバーへのSSHアクセス権がなければMoshも利用できません。

Moshを使うにはどのポートを開放すればいいですか?

初回ログイン用のSSHポート(通常は22/TCP)と、セッション通信用のUDPポート範囲(60000〜61000)を開放する必要があります。ポート範囲全体を開放したくない場合は、-pオプションでポート番号を1つに指定し、そのポートのみをファイアウォールで開放してください。

Moshでポートフォワーディングやトンネリングはできますか?

いいえ、できません。MoshはポートフォワーディングやX11転送をサポートしていません。データベースやWeb管理画面へのトンネリングが必要な場合は通常のSSH接続を併用し、インタラクティブな端末操作にはMoshを使うという使い分けが適しています。

サーバーにMoshがない場合、termi1ではどうなりますか?

接続は自動的にSSHへフォールバックし、termi1の画面上にmosh-serverが見つからなかった旨の通知が表示されます。サーバー側でsudo apt install mosh(Debian/Ubuntu)またはbrew install mosh(macOS)を実行してインストールすれば、スイッチをオンにしてMosh接続が利用可能になります。