【Herdr】スマホアプリから Mac に入る — Tailscale の ACL と sshd を絞ってからつなぐ

この記事でわかること
- Herdr 公式のスマホアプリは herdr-core に SSH で直接つなぐ仕組みで、旧 herdr(TUI)には対応していないこと
- 「Connect a machine」に入れる値(Host・Port・User・認証)と、Mac 側でリモートログインを ON にする必要があること
- Tailscale の ACL を「iPhone → Mac・desktop」「Mac → desktop」のように端末ごとに書く方法
- アプリで鍵を作れなかったので、パスワードログインを Tailscale 経由だけに限った sshd の設定
- Claude Code の ! では sudo のパスワードが入力できないという小さな罠
Herdr.app(herdr-core)を Mac で使っていて、Tailscale で Mac と iPhone がつながっている方向けです。Herdr.app 0.1.11 / herdr-core 0.1.17 時点の内容です。
概要
この記事では、Herdr の公式スマホアプリを入れて、iPhone から Mac で動いている Herdr(herdr-core)につなぐまでにやったことをまとめます。
Herdr のスマホアプリは「そのうち入れる」タスクとして Notion に積んでいたのですが、公式アプリが出ていたので入れてみました。入れたまではよかったのですが、最初に「Connect a machine」という画面が出てきて、何を入れればいいのか正直分かりませんでした...
ついでに、外から入れる経路が増えるので、先に Tailscale まわりのセキュリティも見直しています。作業はほぼ Claude Code と相談しながら進めたので、その流れも書いておきます。
対象者
- Mac で Herdr.app(herdr-core)を使っていて、スマホからも様子を見たい方
- Tailscale を入れたものの、ACL は初期設定のままになっている方
- herdr の連載(Ghostty + herdr CLI から herdr app に乗り換える など)を読んでくださった方
動作環境
| 項目 | 内容 |
|---|---|
| Mac | MacBook Air(macOS / OpenSSH 10.5) |
| Herdr | Herdr.app 0.1.11 / herdr-core 0.1.17 |
| スマホ | iPhone(Herdr 公式アプリ) |
| VPN | Tailscale(Mac・iPhone・自宅の Windows の3台) |
公式アプリの仕組み
最初は Claude Code に「Connect a machine に何を入れればいいのか」と聞いたのですが、返ってきたのは非公式アプリ(Herdrup や Heeler など)の話でした。調べた記事がどれも少し前のもので、「Herdr には公式のスマホアプリがない」と書かれていたからです。「公式アプリさっき出ましたよ」と伝えて、公式ページ(herdr.dev/mobile)を読み直してもらいました。
公式ページによると、下記のような仕組みです。
- スマホから各マシンの herdr-core に SSH で直接つなぐ。Herdr のアカウントや中継サーバーは使わない
- herdr-core が必要で、Herdr TUI(旧
herdr)には対応していない - 1台つなぐと、SSH の設定にあるホストや Tailscale の端末を候補として出してくれる
つまり、つなぐ先のマシンで SSH を受け付けていて、herdr-core が入っていれば良いという感じです。
ここで自分の環境を見ると、Mac は herdr-core が入っているけど SSH は OFF、自宅の Windows(WSL)は SSH は通るけど旧 herdr しか入っていない、という状態でした。なので、まずは Mac につなぐことにしました。
Tailscale の ACL を端末ごとに絞る
アプリの前に、Tailscale の管理画面を見てもらいました。ACL は初期設定のままで、「どの端末からどの端末のどのポートにも入れる」状態でした。新しい端末の承認(Device Approval)も OFF でした。
最初は「自分の端末から desktop の SSH だけ」に絞ったのですが、Mac にもつなぐことになったので、下記のように端末ごとに書き直しました。
"hosts": {
"desktop": "100.x.x.1",
"mac": "100.x.x.2",
"iphone": "100.x.x.3",
},
"grants": [
// iPhone → Mac・desktop
{"src": ["iphone"], "dst": ["mac", "desktop"], "ip": ["tcp:22", "icmp:*"]},
// Mac → desktop
{"src": ["mac"], "dst": ["desktop"], "ip": ["tcp:22", "icmp:*"]},
],通るのは SSH(22番)と ping だけで、desktop からはどこにも入れません。保存するときに、ポリシーファイルの tests で「この組み合わせは通る・通らない」を自動で確かめるようにもしてもらいました。
注意点としては、端末を IP で指定しているので、登録し直したり機種変更したりするとルールの直しが要ります。新しい端末の承認を ON にしておけば、そのタイミングで気づけるかなと思っています。
Connect a machine に入れる値
Mac 側は「システム設定 → 一般 → 共有 → リモートログイン」を ON にします。ここは自分で操作しました。
アプリの「Connect a machine」には下記を入れました。
| 項目 | 入れた値 |
|---|---|
| Host | Mac の Tailscale の IP(または my-mac のようなマシン名) |
| Port | 22 |
| User | Mac のユーザー名 |
| 認証 | Mac のログインパスワード |
初めてつなぐときに、iPhone 側に SHA256:... という値が出てきます。これは Mac が本物かを確かめるためのホスト鍵のフィンガープリントなので、Mac で下記を打って出た値と見比べます。
for f in /etc/ssh/ssh_host_*_key.pub; do ssh-keygen -lf "$f"; done一致したので信頼して進めたら、そのまま入れました。
パスワードログインを Tailscale 経由だけにする
つながったのは良かったのですが、パスワードで入っているのが少し気になりました。Tailscale の ACL で絞れるのは Tailscale 経由の通信だけなので、カフェなど同じ Wi-Fi にいる人からは Mac の22番に直接届いてしまいます。
本当は鍵認証に切り替えたかったのですが、アプリの中で鍵を作る項目を探しても見つけられませんでした(自分が見落としているだけかもしれません)。
そこで、パスワードで入れるのは Tailscale 経由のときだけにしました。/etc/ssh/sshd_config.d/010-tailscale-only.conf に下記を置きます。
PasswordAuthentication no
KbdInteractiveAuthentication no
Match Address 100.64.0.0/10,127.0.0.1,::1
PasswordAuthentication yes
KbdInteractiveAuthentication yes
Match all100.64.0.0/10 は Tailscale が端末に割り当てるアドレスの範囲です。反映されたかは sshd -T -C で、接続元を変えたときの判定を見られます。
sudo sshd -t && echo "設定OK"
# Wi-Fi から来た場合(no になってほしい)
sudo sshd -T -C addr=192.168.1.10,user=me,host=x | grep -iE "^(passwordauth|kbdinteractiveauth)"
# Tailscale 経由の場合(yes になってほしい)
sudo sshd -T -C addr=100.64.0.1,user=me,host=x | grep -iE "^(passwordauth|kbdinteractiveauth)"想定どおり前者が両方 no、後者が両方 yes になり、iPhone からもこれまでどおり入れました。再起動は要りませんでした。戻すときは sudo rm /etc/ssh/sshd_config.d/010-tailscale-only.conf です。
ちなみに、このコマンドを最初は Claude Code の ! で打ったのですが、sudo: a terminal is required to read the password で弾かれました。! だとパスワードの入力欄が出ないので、クリップボードにコピーしてもらって普通のターミナルで打ちました。
感想
公式アプリ自体は「SSH でつなぐだけ」なので、アプリの設定というより、つなぐ先の SSH と Tailscale をどうするかがほぼ全部でした。個人的には、アプリを入れるついでに ACL が初期設定のままだったことに気づけたのが一番大きかったなと思いました。
一方で、自宅の Windows は旧 herdr しか入っていないので、公式アプリからはつなげません。desktop はそんなに使わないので、今回は見送りにしました。
あと、公式ページには「Tailscale SSH なら鍵の設定なしで使える」とも書かれていたので、パスワードをやめたくなったらそっちを試すのもありかなと思っています(多分)。
おわりに
今回は、Herdr の公式スマホアプリから Tailscale 経由で Mac につなぐまでをまとめました。外から入れる経路を増やすときは、先に ACL と sshd を見直しておくと安心だと思います。
最後まで読んでいただきありがとうございました。


