毎回、PC をセットアップする際に調べてしまうため備忘録として残しておく
実際のコード
Mac
- 以下のコマンドを GitHub のEメールアドレスに置き換えて実行
$ ssh-keygen -t rsa -b 4096 -C "your_email@example.com" -f "id_rsa"
> Generating public/private rsa key pair.
- 以下が表示されるのでファイル場所を入力(デフォルトでいい場合は「Enter」押下)
> Enter a file in which to save the key (/Users/you/.ssh/id_rsa): [Press enter]
- 以下が表示されるのでパスフレーズを入力(なしでいい場合は「Enter」押下)
> Enter passphrase (empty for no passphrase): [Type a passphrase]
> Enter same passphrase again: [Type passphrase again]
-
SSH キーを ssh-agent に追加する
4-1. バックグラウンドでssh-agentを起動
$ eval "$(ssh-agent -s)"
> Agent pid 59566
※ macOS Sierra 10.12.2 以降を使用している場合は ~/.ssh/config
ファイルを変更して自動的にキーを ssh-agent
にロードしパスフレーズをキーチェーンに格納する必要あり
Host *
AddKeysToAgent yes
UseKeychain yes
IdentityFile ~/.ssh/id_rsa
- SSH 秘密鍵を ssh-agent に追加してパスフレーズをキーチェーンに保存する
ssh-add --apple-use-keychain ~/.ssh/id_rsa
- 公開鍵をクリップボードにコピーする
pbcopy < ~/.ssh/id_rsa.pub
- SSH キーを GitHub アカウントに追加する
Windows(基本的には Mac と同じ)
- 以下のコマンドを GitHub のEメールアドレスに置き換えて実行
$ ssh-keygen -t rsa -b 4096 -C "your_email@example.com" -f "id_rsa"
> Generating public/private rsa key pair.
- 以下が表示されるのでファイル場所を入力(デフォルトでいい場合は「Enter」押下)
> Enter a file in which to save the key (/c/Users/you/.ssh/id_rsa):[Press enter]
- 以下が表示されるのでパスフレーズを入力(なしでいい場合は「Enter」押下)
> Enter passphrase (empty for no passphrase): [Type a passphrase]
> Enter same passphrase again: [Type passphrase again]
- 公開鍵をクリップボードにコピーする
type ~/.ssh/id_rsa.pub | clip
- SSH キーを GitHub アカウントに追加する
複数の GitHub アカウントを切り替える場合
-
使用したい GitHub アカウント毎に SSH 鍵を作成する
-
~/.ssh/config
を編集する ※ない場合は新規作成
Host github.com # メインアカウント
HostName github.com
User git
Port 22
IdentityFile ~/.ssh/id_rsa
TCPKeepAlive yes
IdentitiesOnly yes
Host github.com.sub # サブアカウント
HostName github.com
User git
Port 22
IdentityFile ~/.ssh/id_rsa_sub
TCPKeepAlive yes
IdentitiesOnly yes
-
GitHub に公開鍵を登録する
GitHub にログインして、[Settings] > [SSH keys] > [Add SSH key]で作成した公開鍵を登録する
-
以下のコマンドを実行して設定が上手くいっていることを確認する
ssh -T git@github.com
ssh -T git@github.com.sub
# Hi {yourname}! You've successfully authenticated, but GitHub does not provide shell access.