はじめに
目的
プロジェクトによってSSHキーを分けることで複数所持している場合、特にGitHubのキーが複数存在するときに、cloneコマンドが動かない場合がある。SSHキーの数はそのままにcloneできるようにする。
なお、本件はUNIXにて実施している
結論
GitHubのclone引用コピペをSSHキーconfig内容に注意しながら書き換えて実行する。[Host]はhostnameではない。
git clone git@[Host]:[GitHubユーザー名]/[リポジトリ名].git
目次
手順
1. 準備
まず、SSHキーをEd25519暗号にて作成する。詳細は以下
SSHキーを作成
下記コマンドにてキーを作成する。例はEd25519鍵。
$ ssh-keygen -t ed25519
すると以下の表示が出力され、入力モードになる。
複数の鍵を所持している場合は、ここで鍵の名前を入力することになると思われる。
Generating public/private ed25519 key pair.
Enter file in which to save the key (/home/user/.ssh/id_ed25519):
その後、パスフレーズの設定があり、作成が完了する。
Enter passphrase (empty for no passphrase):
Enter same passphrase again:
Your identification has been saved in id_hoge
Your public key has been saved in id_hoge.pub
The key fingerprint is:
SHA256:Np4scfKVKrMlSwOYF75Qb/F+6CtHzu9IP27E4xWJNR0 User@DESKTOP1
The key's randomart image is:
+--[ED25519 256]--+
| .E. |
| o . |
| o . o o |
| = o o ..o |
| + + = S.o . |
| o + X.*+ . |
| . B+@o.o |
| ..%+++ |
| oo+*=. |
+----[SHA256]-----+
その後、GitHub上でSSHキーを登録する。
右上のアイコン → Setting → SSH and GPG keys → New SSH key ボタン
から、先程作成したid_hoge.pubの記述内容をコピペする。
configの設定
~/.ssh/におけるSSHキーのconfigを設定する。元々2つのキーが存在している状態で、上記1のようにしてid_hogeキーを追加作成した場合を考える。ディレクトリ内は以下のようになっている。
-rw-r--r-- 1 user user 304 Aug 21 14:15 config
-rw------- 1 user user 411 Aug 20 14:09 id_git_ed25519_1
-rw-r--r-- 1 user user 101 Aug 20 14:09 id_git_ed25519_1.pub
-rw------- 1 user user 411 Aug 27 14:10 id_git_ed25519_2
-rw-r--r-- 1 user user 101 Aug 27 14:10 id_git_ed25519_2.pub
-rw------- 1 user user 411 Aug 27 14:11 id_hoge
-rw-r--r-- 1 user user 101 Aug 27 14:11 id_hoge.pub
-rw-r--r-- 1 user user 1110 Aug 3 13:03 known_hosts
configにid_hogeキー設定を追記する。例として下記のように記述したとする。
注意点として、GitHubで用いる場合は、hostnameは接続先ホスト名もしくはIPを入力するため"github.com"、
UserはGitHubに登録しているユーザーネーム等ではなく"git"で設定しなければならない。
Host hoge
hostname github.com
IdentityFile ~/.ssh/id_hoge
User git
Host GitHub-Repository1
hostname github.com
IdentityFile ~/.ssh/id_git_ed25519_1
User git
Host GitHub-Repository2
hostname github.com
IdentityFile ~/.ssh/id_git_ed25519_2
User git
2. 接続確認
実際に作業を実施するディレクトリにて接続確認を実施する。その際、~/.ssh/configに従ったコマンドにする必要がある。
$ ssh -T git@[Host]
例として、上記configに従って表記すると下記のようになる。
$ ssh -T git@hoge
接続が成功した場合は下記のような表示が出力される。
Hi [GitHub ユーザー名]! You've successfully authenticated, but GitHub does not provide shell access.
SSH接続テストエラー例
もし何か問題がある場合は下記のようなエラーが出ることがある。
git@github.com: Permission denied (publickey).
- Userが"git"になっていない
- GitHub側からキーが見つからない
等が考えられる。
ssh: Could not resolve hostname hoge: Name or service not known
~/.ssh/configにおいて登録されていないHostを入力すると出力される。
3. clone
接続確認が完了した場合は、同様の注意点を意識するとcloneできる。実際のclone時にはGitHubブラウザにおける各リポジトリにてcodeボタンを押したときに出るclone用のウィンドウのSSHタブにて表示されているコードをコピーペーストすることになると思われるが、その際に[Host]に当たる部分は忘れずに書き換える必要がある。
$ git clone git@[Host]:[GitHubユーザー名]/[リポジトリ名].git
上記例を踏まえると下記のようになる。
$ git clone git@hoge:GitHub-User/hogehoge.git
参考
SSH接続のテスト
https://docs.github.com/en/authentication/connecting-to-github-with-ssh/testing-your-ssh-connection
なぜ GitHub への 公開鍵認証での SSH は User git で接続できるのか?
https://zenn.dev/junki555/articles/508c474f72e8c8