OpenSSHでKey-Pairを生成

ssh-keygenコマンドでキーペアを生成する。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
PS > ssh-keygen -t rsa -C XXXXXXX@XXXXXXX -f XXXXXXX.key
Generating public/private rsa key pair.
Enter passphrase (empty for no passphrase):
Enter same passphrase again:
Your identification has been saved in XXXXXXX.key.
Your public key has been saved in XXXXXXX.key.pub.
The key fingerprint is:
SHA256:XXXXXXXXXXXXXXXXXXXXXXXXXX XXXXXXX@XXXXXXX
The key's randomart image is:
+---[RSA 2048]----+
| oo ...o=+B|
| . . ox=ox*|
| o ...X+++ |
| xxxxx+ |
| oSxxx=o |
| . = =.+. |
| . .o |
| . . |
| .. |
+----[SHA256]-----+

GitHubへ公開鍵を登録

SSH and GPG keys - SSH Keys - New SSH Key

GitHub SSH-key width=640

作成した公開鍵XXXXXXX.key.pubの内容を登録する。

GitHub SSH-key width=640

ここでは他のアカウントで使用している公開鍵を登録できない。

OpenSSHで複数のGitHubに接続する設定

sshのconfigファイルを修正

Windowsの標準のssh設定フォルダー(C:\Users\ログインユーザ名\.ssh)にあるconfigファイルを以下のように構成する

1
2
3
4
5
6
7
8
9
10
11
12
13
Host github-USER_X
HostName github.com
User git
IdentityFile ~/.ssh/USER_X/priv.key
IdentitiesOnly yes
AddKeysToAgent yes

Host github-USER_Y
HostName github.com
User git
IdentityFile ~/.ssh/USER_Y/priv.key
IdentitiesOnly yes
AddKeysToAgent yes

キーペアの接続テスト

デフォルトパスで1つのみ使用する場合はssh -T git@github.comで接続確認ができるがエラーになる
デバッグはssh -vT git@github.comのようにvを付けることで詳細が出力される

1
2
PS > ssh -T git@github.com
git@github.com: Permission denied (publickey).

使用するアカウントを指定する必要があるのでconfigで指定したHostに接続する

1
2
PS > ssh -T github-USER_X
Hi USER_X! You've successfully authenticated, but GitHub does not provide shell access.

set-urlで接続先を変更

このままではgitコマンドコマンドを使用した際に接続エラーとなるため、接続先の切替を行う。

1
2
3
4
5
6
7
PS > git remote -v
origin https://github.com/XXXXXXXX/app-repo.git (fetch)
origin https://github.com/XXXXXXXX/app-repo.git (push)
PS > git remote set-url origin git@github-USER_X:USER_X/app-repo.git
PS > git remote -v
origin git@github-USER_X:USER_X/app-repo.git (fetch)
origin git@github-USER_X:USER_X/app-repo.git (push)

新しいリポジトリ作成時の初期設定

新しリポジトリ作成時は以下の設定を行う

1
2
3
4
5
6
7
8
9
10
PS > git clone https://github.com/<GIT_ACCOUNT>/<GIT_REPOSITORY_NAME>
Cloning into '<GIT_REPOSITORY_NAME>'...
remote: Enumerating objects: 3, done.
remote: Counting objects: 100% (3/3), done.
remote: Compressing objects: 100% (2/2), done.
remote: Total 3 (delta 0), reused 0 (delta 0), pack-reused 0
Unpacking objects: 100% (3/3), done.
PS <GIT_REPOSITORY_NAME>> git config --local user.name <GIT_ACCOUNT>
PS <GIT_REPOSITORY_NAME>> git config --local user.email <E-Mail>
PS <GIT_REPOSITORY_NAME>> git remote set-url origin git@github-<GIT_ACCOUNT>:<GIT_ACCOUNT>/<GIT_REPOSITORY_NAME>