暫くぶりにプライベートで使用しているGit リポジトリを触る時間を作れたので、
Git pushしてみたら
Enter passphrase for key '/Users/reinayamaguchi/.ssh/id_rsa':
って問われて、「はて??? パスフレーズどこ行った??」となり、
仕方ないので、今までのSSH鍵さんにサヨナラして新しい鍵を作成することになった。
という、情けない経験からの覚書です。
Step 1 - SSH KEY の削除
- ターミナルで「.ssh」のディレクトリに移動
$ cd ~/.ssh
- ファイルを確認
$ ls -l
-rw-r--r--@ 1 [user_name] staff 192 Sep 9 2018 config
-rw-------@ 1 [user_name] staff 1766 Sep 4 2018 id_rsa
-rw-r--r--@ 1 [user_name] staff 401 Sep 4 2018 id_rsa.pub
-rw-r--r--@ 1 [user_name] staff 383 Jun 28 17:35 known_hosts
3.「id_rsa」「id_rsa.pub」を削除しls -l
で確認
$ rm id_rsa id_rsa.pub
$ ls -l
-rw-r--r--@ 1 [user_name] staff 192 Sep 9 2018 config
-rw-r--r--@ 1 [user_name] staff 383 Jun 28 17:35 known_hosts
Step 2 - SSH公開鍵を作成
GitLabでは「ED25519」「RSA」を推奨している。
作成方法はGenerating a new SSH key pairで解説している。
どっちを採用しようかと思ったところ、
SSH は (RSA 鍵より) ED25519 鍵の方が強固で速いということ記事で
「ED25519 の方が RSA よりも強度が高く、しかも速いです。」と記されていたので「ED25519」で作成することにした。
- key作成コマンドでkeyの作成。
-C
フラグでメールアドレスなどのコメントを入れられる。-C
フラグなしでも作成できる。
$ ssh-keygen -t ed25519 -C "<comment>"
2.以下のコメントが表示される
Generating public/private ed25519 key pair.
Enter file in which to save the key (/home/user/.ssh/id_ed25519):
なにも入力せずに[Enter]キー押下すると、
パスフレーズの入力を求められるので確認含め2回入力する
Enter passphrase (empty for no passphrase): <- 好きなパスワードを入力
Enter same passphrase again: <- 確認のためにもう一度入力
- 以下が表示されてSSH Keyが作成される
Your identification has been saved in /Users/[user_name]/.ssh/id_ed25519.
Your public key has been saved in /Users/[user_name]/.ssh/id_ed25519.pub.
The key fingerprint is:
SHA256:t4XcnCqRp6cGxy81cR3zyJiurATJ1UBOfv5LEUCn7wY <comment>
- 公開鍵:id_ed25519.pub <- 公開鍵、GitLab(Bitbucket/GitHub)に渡す
- 秘密鍵:id_ed25519 <- 秘密鍵、他人には見られないようにする
4.他の人が秘密鍵・公開鍵を観覧できないようにパーミッションを変更する。
$ chmod 600 id_ed25519
$ chmod 600 id_ed25519.pub
Step3 GitLabに公開鍵を登録する
1.公開鍵をコピーする
$ pbcopy < ~/.ssh/id_ed25519.pub
2.GitLabの「ユーザー設定」→ 「SSH Keys」に移動し公開鍵を登録する。
Step4 「クライアント側」 ~/.ssh/config にSSH Keyを設定する
~/.ssh/config
を開く。
$ vim ~/.ssh/config
前回、SSH鍵を作成してGitLab登録したときに以下を追記してあるので、秘密鍵のファイル名を変更した。
# GitLab.com
Host gitlab.com
User <User Name> <- GitLabで使用しているユーザー名
HostName gitlab.com
TCPKeepAlive yes <- IdentityFileを利用する場合。yesを指定
identitiesonly yes <- 持続的接続のこと。yesを指定
identityFile ~/.ssh/id_ed25519 <- [id_rsa]を[id_ed25519]に差し替え
以上で、git pull , git push ができるようになった!