iPhoneからMacのherdrへ。Moshiとゼロトラストリンクを試した
ゼロトラストリンク、Moshi、herdrを組み合わせ、iPhoneからMacの作業セッションへ復帰できるか検証し、デプロイナウまで操作した記録。
外出先から、Macに残している開発作業の続きを操作したい。 ただし、そのためにMacのSSHポートをインターネットへ公開するわけにはいかない。
使いたかったのは、iPhone向け端末のMoshiと、AIコーディングエージェント用のセッションを保持するherdrの組み合わせだった。 Moshiはherdrを単なるSSH先として扱うだけでなく、ワークスペース選択、エージェント状態の表示、スマートフォン向け操作など、herdr専用の機能を備えている。 残る問題は、iPhoneからMacまでの接続経路だった。 そこで、両端末の間にロリポップ!ゼロトラストリンク byGMOペパボを置いた。
2026年7月24日、iPhoneからMac上のherdrセッションへ復帰し、テストとロリポップ!デプロイナウの操作まで試した。 これは経路と操作性を確かめるための検証構成であり、実運用に必要な防御をすべて設定した完成形ではない。
四つのサービスの役割
名前だけでは役割を判断しにくい。 各項目には、サービス自体の働きと今回使った範囲だけを記した。
ロリポップ!ゼロトラストリンク:iPhoneとMacをメッシュ内でつなぐ
離れた端末をWireGuardベースの暗号化P2Pメッシュへ参加させるサービス。今回はiPhoneとMacを同じ専用ネットワークへ入れ、ルーターでSSHポートを公開せずにMacのメッシュIPへ接続するために使った。
Moshi:iPhoneからMacの端末を操作する
スマートフォン向けに設計されたSSH/Mosh端末。回線切り替えやアプリの中断から復帰しやすく、herdrのワークスペース選択、エージェント状態、専用ショートカットなども扱える。
herdr:エージェントの作業状態をMacに残す
AIコーディングエージェントを意識したターミナルマルチプレクサ。作業をワークスペース、タブ、ペインに分け、Moshiを切断している間もMac上のシェルやエージェントを動かし続ける。
ロリポップ!デプロイナウ:完成した変更を公開する
CLIからプロジェクトをビルドし、Webへデプロイするサービス。今回はMoshiからherdrへ戻った後、テスト結果を確認し、そのまま同じセッションから公開とログ確認まで進めた。
接続から公開までの構成
四つのサービスには、接続経路、端末操作、作業状態の保持、公開という別々の責務を割り当てた。 操作はiPhoneから始まるが、テストとビルドはMac上で実行される。
| 層 | プロダクト | 役割 |
|---|---|---|
| ネットワーク | ロリポップ!ゼロトラストリンク | iPhoneとMacをWireGuardベースのメッシュへ参加させる |
| 端末クライアント | Moshi | SSHまたはMoshでMacへ接続し、herdrをスマートフォン向けに操作する |
| 作業環境 | herdr | AIコーディングエージェントのセッションを保持する |
| 公開先 | ロリポップ!デプロイナウ | テスト済みの変更をビルドして公開する |
通信と作業の流れは次のようになる。
iPhone
└─ ゼロトラストリンク
└─ SSH / Mosh
└─ Mac
└─ herdr
└─ AIエージェントのセッション
└─ デプロイナウ
Macへ外部から到達するための公開IPやポート転送は用意していない。
Moshiはメッシュ内の100.64.x.xアドレスへ接続するため、iPhoneがメッシュから外れると、その宛先への経路も失われる。
Moshiとherdrを組み合わせる理由
Moshi公式のherdrガイドでは、MoshiはherdrをtmuxやZellijと並ぶ連携対象として扱っている。 Moshiから一般的なSSH画面を開く場合と異なり、herdrの作業単位とエージェント状態を直接扱える。
- Moshiの接続画面から、herdrのセッションだけでなく目的のワークスペースを直接選べる。
- エージェントが
blocked、working、doneのどの状態にあるかをMoshi側で把握できる。 - herdr専用のショートカットパネルに加え、左右スワイプでのタブ移動、ピンチでのペイン拡大、タップ操作を使える。
moshi-hookと組み合わせると、承認待ちなどの通知から、そのエージェントがいるセッション、ワークスペース、タブへ戻れる。- Moshiの接続が切れても、herdrのサーバー上ではシェル、テスト、エージェントが動き続ける。
Macではherdrに複数の作業を残し、iPhoneではMoshiから状態を見て、必要な場所だけを開く。 ゼロトラストリンクが必要だったのは、この操作をSSHポートの公開なしで成立させるためだ。
無料で始められる
検証した2026年7月24日時点では、ゼロトラストリンク、Moshi、herdr、デプロイナウは、いずれも無料で使い始められた。 構成そのものを試すために、最初から四つの有料契約をそろえる必要はない。
Moshiの無料版も期限付き体験版ではなく、SSH端末、エージェント監視、プッシュ通知などを含む。 一方、Moshiの料金ページには月額、年額に加えて、Proの買い切りプランもある。 Moshiとherdrを日常的に使うなら、買い切りも合理的に見える。 買い切るかは、まだ決めていない。
MacとiPhoneをメッシュへ参加させる
最初に、MacとiPhoneを同じゼロトラストリンクのネットワークへ参加させた。 以下のコマンドでは、ユーザー名とメッシュIPを公開用のプレースホルダーへ置き換えている。
Macには、Moshiが利用するセッション管理ツールをHomebrewで追加した。
brew install tmux
次に、Moshiのホスト用ツールからmacOSのRemote Loginを有効にし、メッシュIPを接続先として登録した。
utun8の番号は検証時の値であり、再接続や再起動後も同じとは限らない。
# MacのメッシュIPを確認
ifconfig utun8 | grep 'inet '
# SSHを有効化
moshi-hook host enable-ssh
# Moshi用のホスト設定とQRコードを作成
moshi-hook host setup \
--host <MacのメッシュIP> \
--name "mac-mesh"
表示されたQRコードをiPhoneのMoshiで読み取り、接続先を追加した。 設定後は、ホスト側とherdrの状態を確認した。
moshi-hook status
herdr status
# メッシュ経由のSSH到達性を確認
ssh <macOSユーザー名>@<MacのメッシュIP>
# herdrを開く
herdr
CapsomniaでMacBookをスリープさせない
MacBookがスリープすると、Moshiからメッシュ内のMacへ到達できず、herdrに残した作業へも戻れない。 この構成では、MacBookを起こしたままにするためにCapsomniaを使っている。
Capsomniaは、Caps Lockをオンにするとスリープを無効化し、蓋を閉じてもバックグラウンド作業を続けられる。 Caps Lockをオフにすると、MacBookは通常のスリープ動作へ戻る。 物理キーとLEDで状態を確認できるため、外出前にスリープ防止が有効か判断しやすい。
メッシュ未接続時の失敗を確認する
接続成功より先に、ゼロトラストリンクを切った状態で失敗することを確かめた。

ゼロトラストリンクを切ったままMoshiからmac-meshへ接続すると、SSHは20秒後にタイムアウトした。
設定したメッシュ経路が、通常のインターネット接続へフォールバックしないことを確認できる。

この結果だけでMac上のあらゆる経路が遮断されていると証明できるわけではない。 確認できたのは、今回Moshiへ設定したメッシュIPには、iPhoneがゼロトラストリンクへ参加している間だけ到達できることだ。
メッシュ接続後にMoshiからMacへ入る
ゼロトラストリンクを有効にすると、iPhoneとMacの両方がメッシュ上でオンラインになった。 スクリーンショットでは、メールアドレスとメッシュアドレスを公開用にマスクしている。

Moshi側では、Macをmac-meshとして登録した。
認証にはiPhone内で生成したEd25519鍵を使い、秘密鍵をMacへコピーしていない。
Moshは回線切り替えやスリープからの復帰に強く、移動中の操作にも向いている。
SSHとMoshの使い分け
MoshiはSSHとMoshの両方に対応している。 ただし、二つは同じ接続方式ではない。 OpenSSHのsshは、暗号化したTCP接続を使う汎用のリモートログインクライアントである。 Moshは最初の認証とサーバー起動にSSHを使い、その後の対話通信をUDPへ切り替える。
| 比較項目 | SSH | Mosh |
|---|---|---|
| 回線変更と通信断 | IPアドレスの変更や通信断でTCP接続が失われると、再接続が必要になる | IPアドレスの変更、短い通信断、スリープから復帰しやすい |
| 入力の応答 | サーバーから応答が返るまで入力表示が遅れることがある | ローカルエコーにより、遅延がある回線でも入力を確認しやすい |
| 利用範囲 | 対話シェル、リモートコマンド、TCP転送などに使える | 対話シェルに特化しており、SSHのポート転送などは代替しない |
| 導入と通信 | MacのSSHサーバーへTCPで接続する | Mac側にmosh-serverが必要で、SSHに加えてUDPを通す必要がある |
| 作業状態 | 接続が切れると、対話シェル上の処理も影響を受ける場合がある | mosh-serverが動いている間は、クライアントが一時的に切れてもMac側のセッションが継続する |
SSHの利点は、対応環境が広く、疎通確認、リモートコマンド、ポート転送などを一つの仕組みで扱えることにある。 一方、移動中にIPアドレスが変わったり通信が途切れたりすると、既存のTCP接続は失われる場合がある。
Moshの利点は、Wi-Fiとモバイル回線の切り替えや一時的な圏外をまたいで、同じ対話セッションへ戻りやすいことにある。 一方、Mac側への追加導入とUDP経路が必要になり、ファイル転送やポート転送までMoshだけで完結するわけではない。
今回は、SSHを鍵認証と到達性確認に使い、日常の対話操作をMoshに任せた。 ただし、Moshが保つのは通信中の端末セッションであり、複数のエージェント作業を整理して残す役割はherdrが担う。 ゼロトラストリンクは、SSHのTCPとMoshのUDPをインターネットへ直接公開せず、メッシュ内だけで到達させるために使っている。
herdrに残した作業へ戻る
SSHで対話シェルを開くだけでは、その状態が切断の影響を受ける。 Mac上では、AIコーディングエージェント用のワークスペースを保持するherdrを常駐させた。
Moshiからherdrを開くと、既存ワークスペース、タブ、実行中のAIコーディングエージェントが表示された。 Macで始めた作業を、iPhone側で最初からやり直す必要はなかった。

今回のワークスペースではCodexを動かしていたため、会話履歴と作業状態へそのまま復帰できた。 文字入力だけでなく、タブの切り替えや進行状況の確認もiPhone上で行える。

iPhoneからテストし、デプロイナウへ送る
接続後は、herdr内のエージェントへテスト実行を依頼し、その結果をMoshiで確認できた。 ロリポップ!のCLIを同じセッションから実行すると、プロジェクトの確認、デプロイ、ログの追跡まで続けられる。
# 対象プロジェクトを確認
lolipop project list
# リンク済みプロジェクトをデプロイナウへ送る
lolipop deploy
# 最新デプロイのビルドログを確認
lolipop project logs --latest

ここでiPhoneが担っているのは、Macの代替ではない。 ビルド、テスト、デプロイはMac上で走り、iPhoneはメッシュ側の経路から既存セッションを操作する。 重い処理を端末へ移さず、作業場所だけを広げられた。
検証構成を実運用へ近づける
今回は接続経路を切り分けるため、Macのファイアウォールを一時的に緩めて疎通を確認した。 動作確認としては役立ったが、その状態を実運用へ持ち込むべきではない。
実運用ではmacOSのファイアウォールを有効にしたまま、SSHとMoshの受信元をメッシュ側へ限定する方がよい。
utun8のようなインターフェース番号は再起動や再接続で変わり得るため、番号の固定だけに依存せず、実際のメッシュ経路と100.64.0.0/10の範囲を確認してルールを設計する。
MoshのUDP受信範囲も、インターネット全体ではなくメッシュ内からだけ許可する。
加えて、次の防御を重ねたい。
- SSHは公開鍵認証だけにし、パスワード認証とrootログインを無効にする。
- 遠隔操作には管理者ではない専用ユーザーを使い、必要な権限だけを与える。
- iPhoneを紛失したときは、ゼロトラストリンクの端末登録とSSH公開鍵をすぐ失効できるようにする。
- MacではFileVaultを有効にし、OS、Moshi、herdr、利用するエージェントを継続的に更新する。
- デプロイナウの認証情報はリポジトリや会話履歴へ残さず、本番デプロイには人の承認を挟む。
- 再起動後にも「メッシュ未接続なら失敗する」ことを定期的に再検証する。
今回確認できたのは、iPhoneからherdrの作業へ戻れることと、メッシュ未接続時には設定した経路が失敗することだ。 ファイアウォールを有効にした状態での許可範囲と、端末や鍵を失った場合の失効時間は、まだ検証できていない。
使ったアプリとサービス
- Moshi公式サイト
- Moshiのインストールガイド
- Moshi(App Store)
- herdr公式サイト
- herdrの使い方
- Mosh公式サイト
- OpenSSHのsshマニュアル
- Capsomnia
- ロリポップ!ゼロトラストリンクの発表
- ロリポップ!デプロイナウ
外出先から開きたかったもの
外出先から開きたかったのは、Macそのものではなく、Macに残した開発作業の続きだった。 ゼロトラストリンクへ参加したiPhoneからMoshiを開き、herdrの作業へ戻り、テストとデプロイまで進められた。
SSHポートをインターネットへ公開せずに入口を作れた一方、今回の確認だけでは実運用の防御は完成しない。 次に確かめるのは、ファイアウォールを有効に保ったまま通信をメッシュ内へ限定し、端末や鍵を失ったときに短時間で遮断できるかどうかだ。