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?

More than 1 year has passed since last update.

【GitHub】複数のsshキーを登録している際のclone失敗について

Last updated at Posted at 2022-09-09

はじめに

目的

 プロジェクトによってSSHキーを分けることで複数所持している場合、特にGitHubのキーが複数存在するときに、cloneコマンドが動かない場合がある。SSHキーの数はそのままにcloneできるようにする。
 なお、本件はUNIXにて実施している

結論

 GitHubのclone引用コピペをSSHキーconfig内容に注意しながら書き換えて実行する。[Host]はhostnameではない。

Git cloneコマンド
git clone git@[Host]:[GitHubユーザー名]/[リポジトリ名].git

目次

  1. 準備
    • SSHキーの作成
    • configの設定
  2. 接続確認
    • SSH接続テストエラー例
  3. clone

手順

1. 準備

 まず、SSHキーをEd25519暗号にて作成する。詳細は以下

SSHキーを作成

 下記コマンドにてキーを作成する。例はEd25519鍵。

SSHキーの作成コマンド
$ ssh-keygen -t ed25519

すると以下の表示が出力され、入力モードになる。
複数の鍵を所持している場合は、ここで鍵の名前を入力することになると思われる。

SSHキー名の設定
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キーを追加作成した場合を考える。ディレクトリ内は以下のようになっている。

~/.ssh
-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"で設定しなければならない。

~/.ssh/config 例
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接続確認コマンド
$ ssh -T git@[Host]

例として、上記configに従って表記すると下記のようになる。

SSH接続確認コマンド例
$ ssh -T git@hoge

接続が成功した場合は下記のような表示が出力される。

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

SSH接続テストエラー例

もし何か問題がある場合は下記のようなエラーが出ることがある。

エラー例①
git@github.com: Permission denied (publickey).
  1. Userが"git"になっていない
  2. GitHub側からキーが見つからない
    等が考えられる。
エラー例②
ssh: Could not resolve hostname hoge: Name or service not known

~/.ssh/configにおいて登録されていないHostを入力すると出力される。

3. clone

 接続確認が完了した場合は、同様の注意点を意識するとcloneできる。実際のclone時にはGitHubブラウザにおける各リポジトリにてcodeボタンを押したときに出るclone用のウィンドウのSSHタブにて表示されているコードをコピーペーストすることになると思われるが、その際に[Host]に当たる部分は忘れずに書き換える必要がある。

cloneコマンド
$ git clone git@[Host]:[GitHubユーザー名]/[リポジトリ名].git

上記例を踏まえると下記のようになる。

cloneコマンド例
$ 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

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?