0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

1Password SSH Agent で GitHub 認証が通らない原因と対処(IdentitiesOnly が犯人だった話)

0
Posted at

結論

原因: ~/.ssh/configIdentitiesOnly yes
IdentityFile を指定していない状態でこれがあると、1Password エージェントの鍵がすべてスキップされ、デフォルトの ~/.ssh/id_rsa だけが試されて GitHub 認証に失敗する。

対処: GitHub 用の Host ブロックから IdentitiesOnly yes の行を削除する。

Host github.com
  HostName github.com
  User git
  IdentityAgent "/Users/xxx/Library/Group Containers/2BUA8C4S2C.com.1password/t/agent.sock"
  # IdentitiesOnly yes  ← この行を削除

これで ssh -T git@github.com が通るようになる。


はじめに

1Password の SSH エージェントで GitHub に繋ぎたいのに、次のような状態になっていませんか?

  • 公開鍵は GitHub に登録済み
  • ssh-add -l ではエージェントに鍵が載っている
  • それなのに ssh -T git@github.com だけ Permission denied (publickey) で失敗する

以下、そのときの症状と切り分け手順を書きます。

症状

エージェント経由で鍵が認識されていることは確認できている。

# 1Password のエージェントソケットを指定して鍵一覧を表示
SSH_AUTH_SOCK="/Users/.../Library/Group Containers/2BUA8C4S2C.com.1password/t/agent.sock" ssh-add -l
# → 256 SHA256:... id_ed25519_github (ED25519)

しかし GitHub への接続だけ失敗する。

SSH_AUTH_SOCK=".../agent.sock" ssh -T git@github.com
# → git@github.com: Permission denied (publickey).

「鍵はあるのになぜ?」という状態でした。

切り分け:verbose で何が起きているか見る

ssh -v(または -vv)で接続すると、どの鍵が実際にサーバーに送られているか分かります。

ssh -vT git@github.com 2>&1 | grep -E "Offering|Authentications"

ここで id_ed25519_github が一切 "Offering" されていなかった ことが判明しました。代わりに次のような出力でした。

debug1: Offering public key: /Users/xxx/.ssh/id_rsa RSA SHA256:...
debug1: Authentications that can continue: publickey

つまり、1Password エージェントが持っている ED25519 鍵ではなく、従来の ~/.ssh/id_rsa だけが試されていた、という状態です。

原因の詳細:IdentitiesOnly の挙動

~/.ssh/configIdentitiesOnly yes を指定していると、SSH クライアントは「設定に書かれた鍵だけ」を使おうとします。

  • IdentityFile何も書いていない場合、デフォルトの ~/.ssh/id_rsa などだけが対象になる
  • 1Password エージェントが提供する鍵は「設定に明示されていない」ため、すべてスキップされる

その結果、エージェントには鍵が載っているのに、接続時には使われず Permission denied になっていました。

補足:IdentitiesOnly を使いたい場合

複数の鍵を持っていて「この Host ではこの鍵だけ使いたい」と制限したい場合は、IdentityFile を明示する必要があります。

1Password の鍵をファイルとして書き出さずエージェントだけで使う場合、多くの環境では「エージェントに登録されている鍵をすべて試す」形にするため、IdentitiesOnly を付けない運用が無難です。

別の鍵(例:自前サーバー用の id_rsa)だけを使いたい Host では、その Host ブロックに IdentityFile ~/.ssh/server_keyIdentitiesOnly yes をセットで書く、といった使い分けができます。


環境: macOS、1Password(SSH エージェント有効)、~/.ssh/configIdentityAgent を 1Password のソケットに指定済み。

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?