完璧に記述しているSSH Configで認証できなかった話
まえがき
bitbucketでいつもと違うワークスペースにリポジトリを作り、ローカル端末に用意していたリポジトリをプッシュしようとしたら拒否されて4時間ハマったので、解決法を記載します。
部分的には完璧にあっていた。
ググって出てきた答えや、ChatGPTの提案は全て実施しましたが元々なんらミスっていなかったので、全く解決しませんでした。
そもそも、私がスペースのオーナーから管理者権限を移譲してもらって作ったリポジトリなのにアクセス権限がないのは意味不明でした。
・・・そう、部分的には完璧だったのです。
下のような感じです。
265 # bitbucket.org$
266 Host bitbucket.org$
267 $
268 User git$
269 Port 22$
270 HostName bitbucket.org$
271 IdentityFile ~/.ssh/hoge.huga.key
ね、完璧でしょ?
実際、完璧です。
ですから、ここだけググってもこれ以上の解決策は絶対に出てきません。
合っているから。
確認のためにSSH接続チェックコマンドを実施すると接続OK、でもシェル接続はできませんと帰ってきていました。
ssh -T git@bitbucket.org
答え
ヒントは前書きにあります。
ようするに腹数アカウント持ちで、似たような設定が既に記述されていたってことです。
46 # bitbacket_hello$
47 Host bitbucket.org$
48 User git$
49 Hostname bitbucket.org$
50 IdentitiesOnly yes$
51 IdentityFile ~/.ssh/id_rsa_bitbacket.key$
(中略)
265 # bitbucket.org$
266 Host bitbucket.org$
267 $
268 User git$
269 Port 22$
270 HostName bitbucket.org$
271 IdentityFile ~/.ssh/hoge.huga.key
このようになっていました。
ここでsshコマンドはHostの項目を見て、どの秘密鍵を使うかを判断します。
ところが上記のようにHostに同じ値が設定されていると、後から書いた方は無効になってしまうのです。
(前と後ろどっちを消すかは毎回同じ挙動かわかりません。とにかく競合させると大変なことになるのは確か。)
じゃあどうするかというと、片方を例えば
Host bitbucket.org_sub
みたいにします。
それでそっちからcloneしたいときは
git clone git@bitbucket.org_sub:my_workspace/my_repository.git
というふうにホスト部を変えてやれば、接続できます。
あとがき
今回は別の設定の影響で、一見接続できているように見える非常に難解なトラブルでした。
みなさんも偽の成功メッセージに騙されないよう、頭を柔らかくしてトラブル対応にあたってください。
株式会社ONE WEDGE
【Serverlessで世の中をもっと楽しく】 ONE WEDGEはServerlessシステム開発を中核技術としてWeb系システム開発、AWS/GCPを利用した業務システム・サービス開発、PWAを用いたモバイル開発、Alexaスキル開発など、元気と技術力を武器にお客様に真摯に向き合う価値創造企業です。
Discussion
ssh_config(5)
のman pageにはと、先に得られた値が使われると書かれています。
この記述自体は、例えば
というような設定の場合、
User
はHost *
の方が適用されるのでデフォルト的な設定は後ろに書けという事を言っているのですが、先に得られた値が使われるというのは同一のHost
設定の場合にも当てはまります。特に上記設定の場合は
IdentityFile
の設定は意図した物が使われるのにUser
が意図した物にならないという分かりづらい状況になるので、設定がどういう順番で使われるかというのは認識しておいた方がいいと思います。詳細な補足をいただきありがとうございます!