Open1

SourceTreeがed25519のSSH鍵を認識しなかった話

tech_mwtech_mw

gitはチーム開発×業務で毎日使っていたのですが、深く追求する事がなかったため不意に意図しない状況に陥ると都度調べてなんとか解決してきました

調べてすぐ解決できる程度であればまだしも中には複雑で状況が把握できず困った状況に覚えがあったため改めてShell操作(CLI)と SourceTreeで操作(GUI)でそれぞれgitの理解を深めようとしている。といった経緯があります

mac上でGit用のSSH鍵を新しく生成、SourceTreeに登録しようとしたところ、ed25519形式では正しく認識されず、rsa形式で再生成することで解決しました。ed25519形式でも認識できる方法(それともSourceTreeの問題でそもそもed25519に対応していない可能性?)があると思うのですが現状優先度が高くないため調べていません

備忘録としてメモします

環境

pc:MacBook Pro(2019)
os:macos Sequoia
SourceTree:4.2.11

問題

既存のed25519形式の鍵があるためSourceTreeに認識させたいだが認識されない(SourceTree上で新規作成はしない)

結果

ed25519形式の鍵ではSourceTreeが上手く認識しないため、rsa形式の鍵を作成し直す事で改善

SourceTreeを使った経緯

業務ではTerminal✖️コマンドでgit操作していましたが、下記の流れでSourceTreeを改めて学習しています

  1. 業務でadd,commit,push,pull,mergeなどは当然使っていて特に問題なかったが、何かの拍子でこんがらがった場合「どの場所がどういう状態になっていてどうすれば解決できるのか?」で詰まる事があった
  2. 過去にもやった Learn Git Branching で再度インプット
  3. 履歴の可視化はやはり分かりやすい、SourceTree使えるようにしよう(git treeなどでも履歴は確認できるがGUIクライアントを選択)

試したこと

1. SSH鍵があるか確認

ls -l ~/.ssh/id_*

鍵が存在しなかったため新規作成へ

2. SSH鍵を新規作成(デフォルトではed25519形式が自動生成、推奨される)

ssh-keygen

作成された鍵ファイル:

  • ~/.ssh/id_ed25519(秘密鍵)
  • ~/.ssh/id_ed25519.pub(公開鍵)

3. GitHubに公開鍵を登録

pbcopy < ~/.ssh/id_ed25519.pub

GitHubにて:

  • [Settings] → [SSH and GPG keys] → [New SSH key]
  • Title:任意
  • Key type:Authentication Key
  • Key:公開鍵を貼り付け(先程のpbcopyコマンドで内容がコピーできているのでそのままペースト)

4. GitHubとの接続確認

ssh -T git@github.com

結果:

Hi [ユーザー名]! You've successfully authenticated, but GitHub does not provide shell access.

→ 成功

5. SourceTreeにアカウント紐付け

5-1. SourceTreeを立ち上げ、「・・・」アイコンから「アカウント」を選択

5-2. 左下にある「追加」をクリック
・現時点では何もアカウントがないため「アカウントがありません」
・ rsa形式の鍵の場合はこの時点でSSHキーに公開鍵が認識されているがed25519形式の場合は認識されなかった

5-3. ホストをGithubに変更、ユーザー名の「アカウントを接続」をクリック

5-4. 別タブで紐付ける事ができるgithubアカウントが表示されるので「Continue」を選択

5-5. SourceTree上のユーザー名に選択したgithubアカウントが表示、紐付ける事ができている事を確認できたので「保存」をクリック

以上

これだけで本来SourceTreeにgitアカウントと既存のSSH公開鍵を紐付ける事ができるのですが
当初はed25519形式の鍵を使っていたため、どうやっても紐付けができませんでした

解決策

1. 既存のed25519形式のSSH鍵を削除、rsa形式で再作成

# ed25519形式の鍵を削除
rm ~/.ssh/id_ed25519*

# rsa形式で鍵を作成
ssh-keygen -t rsa -b 4096

# rsa形式で正しく作成できている事を確認 
ls -l ~/.ssh/id_*

作成された鍵ファイル:

  • ~/.ssh/id_rsa(秘密鍵)
  • ~/.ssh/id_rsa.pub(公開鍵)

2. 先程github上に登録した鍵を削除、同様の手順で今回作成した鍵で再登録

(削除)GitHubにて:
[Settings] → [SSH and GPG keys] → 対象のKeyで[Delete]

3. SourceTree上のアカウントを削除、同様の手順で改めてアカウント登録

(削除)SourceTree上にて:
「・・・」アイコンから「アカウント」を選択、対象アカウントを選択、「削除」クリック

4. 改めてSSH経由で GitHub に接続して認証できるかを確認

ssh -T git@github.com

結果:

Hi [ユーザー名]! You've successfully authenticated, but GitHub does not provide shell access.

→ 成功