SSH鍵を1Passwordに移したら、Macのgit pushがTouch IDだけになった話
🙌 結論から
SSHの秘密鍵を1Passwordに移したら、git push のたびに鍵のパスフレーズを打つことがなくなりました。
代わりに出てくるのはTouch IDの確認だけで、指を1回置けば終わりです🙌
設定は ~/.ssh/config に2行足すだけなので、思っていたよりずっと簡単でした!
ただ、1Passwordに鍵を7本以上入れたら、サーバーによっては Too many authentication failures で弾かれるようになったので、そこだけ少しハマりました(・_・;)
この記事では、私の設定・ハマった点の直し方・コミット署名・承認の単位の選び方までまとめます。
🤔 秘密鍵が~/.sshに置きっぱなしだった
もう当たり前感あるけど、SSHの鍵って作ったら ~/.ssh に置いたまま、という人が多いと思います。
私もそうでした(^_^)
GitHub用、会社のGitLab用、検証サーバー用、個人開発のVPS用…と増えていって、気づいたら ~/.ssh の中が鍵だらけになっていたんですよね。
しかも最近はClaude CodeやCodexにターミナルを任せる時間が長くて、ホームディレクトリにある秘密鍵を、エージェントが読める場所に置いておくのはちょっと気持ち悪いな・・・と感じるようになりました。
パスワードはもう1Passwordに入れているので、鍵も同じ場所にまとめちゃえ、というのがきっかけです💡
🔧 私の設定はこれ(3ステップ)
公式の手順どおりで、やることは3つだけです。
1. 1PasswordでSSHエージェントをオンにする
メニューバーの「1Password」→「Settings」→「Developer」を開いて、「Use the SSH Agent」にチェックを入れます。
あわせて「General」で「Keep 1Password in the menu bar」と「Start at login」もオンにしておくと、アプリのウィンドウを閉じてもエージェントが動き続けます👍
2. ~/.ssh/config にエージェントの場所を書く
Host *
IdentityAgent "~/Library/Group Containers/2BUA8C4S2C.com.1password/t/agent.sock"
パスが長くてスペースも入っているので、ダブルクォートで囲むのを忘れないようにしてください。
私は打ち間違いが怖かったので、公式にある方法でシンボリックリンクを作って短くしています。
mkdir -p ~/.1password && ln -s ~/Library/Group\ Containers/2BUA8C4S2C.com.1password/t/agent.sock ~/.1password/agent.sock
これで IdentityAgent ~/.1password/agent.sock と書けるようになります✨
3. つながるか試す
ssh -T git@github.com
Touch IDの確認が出て、指を置いたら Hi ユーザー名! が返ってくれば成功です😊
既存の鍵は、1Passwordの「SSH Key」アイテムに読み込ませるだけで移せました👍
移し終わったら、~/.ssh に残っている元の秘密鍵は消すかどこかへ退避しておかないと、移した意味が半分になるので注意です。
😭 鍵が7本でToo many authentication failuresになった
移してしばらくは快適だったんですが、ある日、検証サーバーにだけ入れなくなりました(´・ω・`)
出てきたのはこのエラーです。
Too many authentication failures
原因は、SSHエージェントの仕組みそのものでした。
エージェントは手持ちの公開鍵を1本ずつサーバーに出して、合うものを探します。
ところがOpenSSHのサーバーは、初期設定の MaxAuthTries が6回なので、7本目を出そうとした時点で切られてしまうんですよね( .. )
私は鍵を7本入れていたので、ちょうどこの条件に引っかかっていました…!
直し方は、ホストごとに使う鍵を決めてしまうことです。
1Passwordの鍵のアイテムで「Public key」の欄から公開鍵をダウンロードして、~/.ssh/config にこう書きます。
Host staging-server
HostName 203.0.113.10
User deploy
IdentityFile ~/.ssh/staging.pub
IdentitiesOnly yes
ポイントは、IdentityFile に書くのが公開鍵(.pub)だということです。
秘密鍵は1Passwordに入れたままで、「このホストにはこの鍵だけ出してね」とSSHに教えるイメージですね💡
IdentitiesOnly yes を付けないと、結局ほかの鍵も出してしまうので、ここはセットで書きます。
公式には ~/.config/1Password/ssh/agent.toml で、エージェントが出す鍵とその順番を決める方法もありますが、私はホストが少ないので ~/.ssh/config だけで足りました。
📝 コミット署名も1Passwordに任せた
鍵を移したついでに、Gitのコミット署名もSSH鍵でやるようにしました。
Git 2.34以降が必要なので、先に git --version で確認しておくと安心です🔧
私の ~/.gitconfig はこうなっています(鍵は自分の公開鍵に置き換えてください)。
[user]
signingkey = ssh-ed25519 AAAA...(自分の公開鍵)
[commit]
gpgsign = true
[gpg]
format = ssh
[gpg "ssh"]
program = /Applications/1Password.app/Contents/MacOS/op-ssh-sign
手で書くのが面倒なら、1Passwordで鍵を選んで「…」メニュー →「Configure Commit Signing」→「Edit Automatically」でも書き込んでくれます。
GitHubに登録するときは、「Key type」を Signing key にするのを忘れないでください。
ここを普通の認証用のまま登録すると、署名してもVerifiedが付きません(´・ω・`)
私も最初これでVerifiedが出なくて、しばらく設定を見直していました笑
🔒 承認の単位はタブごとにするか迷った
1Passwordは、どのアプリが鍵を使おうとしているかを見て、承認を求めてきます。
初期設定は「アプリごと」で、一度許可すると、そのアプリとそこから起動したプロセスは、1Passwordがロックされるか終了するまで聞かれません。
これだとGhosttyで1回許可すれば、別のタブも全部通ることになります🤔
設定の「Developer」→「Advanced」にある「Ask approval for each new」で、承認の単位をターミナルのセッション(タブ)ごとにも変えられます。
さらに9月8日の1Password for Mac 8.12.36からは、リクエストごとに毎回聞く設定も選べるようになりました👀
私はかなり迷ったんですが、今は「ターミナルのセッションごと」にしています。
エージェントに作業させているタブで勝手に git push されたら、そこで気づけるからです!
毎回聞くのはさすがに指が疲れそうなので、本番サーバーに入る日だけ切り替えるくらいがちょうどいいかも・・・!
ちなみに執筆時点の最新の安定版は、10月5日の8.12.40でした。
👀 こういう人には向かないかも
満足している前提ですが、合わない人もいると思います。
- 1Passwordを契約していない方: 個人プランは2026年3月27日から年47.88ドルに値上がりしたと報じられています。SSHのためだけに契約するなら、macOS標準のキーチェーンにパスフレーズを覚えさせる
UseKeychain yesで十分かもしれません - 1Passwordのアプリを常駐させたくない方: エージェントはアプリが動いていないと使えないので、メニューバーに置いておく前提になります
- CIやサーバーの中で鍵を使いたい方: これは手元のMacで承認する仕組みなので、無人で動く環境には向きません
逆に、パスワードをすでに1Passwordで管理していて、鍵の置き場所を整理したい人にはかなり合うと思います🙌
🔗 関連記事と使い分け
- Touch IDでsudoを通す記事:
sudoはmacOSのPAMで、SSHとGitの鍵は1Passwordで、と担当を分けています。どちらも指1本で済むので、ターミナルでパスワードを打つことがほぼなくなりました - Ghosttyの記事: 今使っているターミナルです。承認をタブごとにしたのは、ここでClaude Codeを何本も回しているからです
- brew bundleの記事: Macを入れ替えるときはBrewfileでアプリを戻して、鍵は1Passwordにサインインするだけ、という流れになりました
パパ系Webエンジニア〜愛用ガジェット一覧 🛍️
Macとあわせて使っている周辺機器を楽天ROOMにまとめています ✨ 在宅Macデスクの参考にどうぞ 🙌
👍 まとめ
1PasswordのSSHエージェントは、~/.ssh/config に2行足すだけで、鍵の置き場所とパスフレーズの手間をまとめて片付けてくれました。
鍵が7本を超えるならホストごとに IdentityFile と IdentitiesOnly yes を書く、ここだけ押さえれば大きくつまずくことはないと思います(`・ω・´)
これが良いのか悪いか・・・パスワードも鍵も全部1Passwordに寄せることになったけど、まあ便利だからいっか!という気持ちです(^^)
~/.ssh に秘密鍵が並んでいる人は、まず1本だけ移して ssh -T git@github.com を試してみてください✨
※ バージョン番号・料金・機能は今後も変わる可能性があります。最新情報は公式サイトをご確認ください👀