コンテンツにスキップ
EDERX
このページの内容

iPhoneからMacのherdrへ。Moshiとゼロトラストリンクを試した

ゼロトラストリンク、Moshi、herdrを組み合わせ、iPhoneからMacの作業セッションへ復帰できるか検証し、デプロイナウまで操作した記録。

PR

外出先から、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のセッションだけでなく目的のワークスペースを直接選べる。
  • エージェントがblockedworkingdoneのどの状態にあるかを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秒後にタイムアウトした。 設定したメッシュ経路が、通常のインターネット接続へフォールバックしないことを確認できる。

MoshiでSSH接続がタイムアウトした画面

この結果だけでMac上のあらゆる経路が遮断されていると証明できるわけではない。 確認できたのは、今回Moshiへ設定したメッシュIPには、iPhoneがゼロトラストリンクへ参加している間だけ到達できることだ。

メッシュ接続後にMoshiからMacへ入る

ゼロトラストリンクを有効にすると、iPhoneと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側で最初からやり直す必要はなかった。

Moshiからherdrのワークスペースと稼働中のエージェントを表示

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

iPhoneのMoshi上でMacのAIエージェントセッションへ復帰

iPhoneからテストし、デプロイナウへ送る

接続後は、herdr内のエージェントへテスト実行を依頼し、その結果をMoshiで確認できた。 ロリポップ!のCLIを同じセッションから実行すると、プロジェクトの確認、デプロイ、ログの追跡まで続けられる。

# 対象プロジェクトを確認
lolipop project list

# リンク済みプロジェクトをデプロイナウへ送る
lolipop deploy

# 最新デプロイのビルドログを確認
lolipop project logs --latest

Moshi上のherdrセッションからデプロイナウを実行し、ビルドログを確認

ここでiPhoneが担っているのは、Macの代替ではない。 ビルド、テスト、デプロイはMac上で走り、iPhoneはメッシュ側の経路から既存セッションを操作する。 重い処理を端末へ移さず、作業場所だけを広げられた。

検証構成を実運用へ近づける

今回は接続経路を切り分けるため、Macのファイアウォールを一時的に緩めて疎通を確認した。 動作確認としては役立ったが、その状態を実運用へ持ち込むべきではない。

実運用ではmacOSのファイアウォールを有効にしたまま、SSHとMoshの受信元をメッシュ側へ限定する方がよい。 utun8のようなインターフェース番号は再起動や再接続で変わり得るため、番号の固定だけに依存せず、実際のメッシュ経路と100.64.0.0/10の範囲を確認してルールを設計する。 MoshのUDP受信範囲も、インターネット全体ではなくメッシュ内からだけ許可する。

加えて、次の防御を重ねたい。

  1. SSHは公開鍵認証だけにし、パスワード認証とrootログインを無効にする。
  2. 遠隔操作には管理者ではない専用ユーザーを使い、必要な権限だけを与える。
  3. iPhoneを紛失したときは、ゼロトラストリンクの端末登録とSSH公開鍵をすぐ失効できるようにする。
  4. MacではFileVaultを有効にし、OS、Moshi、herdr、利用するエージェントを継続的に更新する。
  5. デプロイナウの認証情報はリポジトリや会話履歴へ残さず、本番デプロイには人の承認を挟む。
  6. 再起動後にも「メッシュ未接続なら失敗する」ことを定期的に再検証する。

今回確認できたのは、iPhoneからherdrの作業へ戻れることと、メッシュ未接続時には設定した経路が失敗することだ。 ファイアウォールを有効にした状態での許可範囲と、端末や鍵を失った場合の失効時間は、まだ検証できていない。

使ったアプリとサービス

外出先から開きたかったもの

外出先から開きたかったのは、Macそのものではなく、Macに残した開発作業の続きだった。 ゼロトラストリンクへ参加したiPhoneからMoshiを開き、herdrの作業へ戻り、テストとデプロイまで進められた。

SSHポートをインターネットへ公開せずに入口を作れた一方、今回の確認だけでは実運用の防御は完成しない。 次に確かめるのは、ファイアウォールを有効に保ったまま通信をメッシュ内へ限定し、端末や鍵を失ったときに短時間で遮断できるかどうかだ。