🔒
GitHubとGitLabにSSH鍵を登録したい
基本的な操作手順
- コマンドラインを使って 🔒 公開鍵/🔑 秘密鍵のペアを作成
- GitHub/GitLab に 🔒 公開鍵を登録する
- ローカルの
ssh-agent
に 🔑 秘密鍵を登録する - おまけ:リモートサーバに 🔒 公開鍵を登録する
参考ドキュメント
- GitLab : Use SSH keys to communicate with GitLab
- GitHub : Generating a new SSH key and adding it to the ssh-agent
🔒 公開鍵/🔑 秘密鍵のペアを作成
-
ssh-keygen
: 持っている機器ごとに公開鍵/秘密鍵のペアを生成する -
-t ed25519
: 暗号化の方式。ググってみると ED25519 のほうが RSA より強いらしい -
-C コメント
: なくてもよい。僕は"機器の名前(メールアドレス)"とつけるようにしている
$ ssh-keygen -t ed25519 -C "コメントを入力する"
Enter file in which to save the key (~/.ssh/id_ed25519): ## デフォルトのパスを使わない場合は、入力する
Enter passphrase (empty for no passphrase): ## マスターパスワードを設定する
Enter same passphrase again:
Your identification has been saved in ~/.ssh/id_ed25519. ## 🔑 秘密鍵のパス
Your public key has been saved in ~/.ssh/id_ed25519.pub. ## 🔒 公開鍵のパス
The key fingerprint is:
SHA256:文字列 コメント
The key's randomart image is:
+--[ED25519 256]--+
| 省略 |
| 省略 |
| 省略 |
| 省略 |
| 省略 |
+----[SHA256]-----+
- 鍵が生成されたことを確認する
$ ls ~/.ssh/
id_ed25519 ## 🔑 秘密鍵;🙅 絶対に外に公開してはダメなファイル
id_ed25519.pub ## 🔒 公開鍵;外部サービスに登録するファイル
公開鍵をコピーする
- コマンドラインを使って公開鍵の内容をクリップボードにコピーする
$ pbcopy < ~/.ssh/id_ed25519.pub
GitHub/GitLab に 🔒 公開鍵を登録
GitHub に 🔒 公開鍵を登録
-
Settings
>SSH and GPG keys
>New SSH key
-
Title
: この鍵に関する情報を入力 -
Key
: クリップボードの内容をペーストする Add SSH key
-
GitLab に 🔒 公開鍵を登録
-
Settings
>SSH Keys
-
Key
: クリップボードの内容をペーストする -
Title
: この公開鍵に関する情報を入力 -
Expired at
: 有効期限があれば設定する Add key
-
リポジトリにプッシュする
- リポジトリを利用するときは
マスターパスワード
を入力すれば OK
$ git push
Enter passphrase for key '~/.ssh/id_ed25519':
Everything up-to-date
- ここまで設定を終えても OK
ssh-agent に秘密鍵を登録する
- ここまでの設定だとリポジトリ操作をするたびにマスターパスワードの入力が必要
-
~/.ssh/config
にssh-agent
の設定を追記して、パスワード入力を省略する
~/.ssh/config
Host *
UseKeychain yes
AddKeysToAgent yes
IdentityFile ~/.ssh/id_e25519
-
IdentityFile
が一意に決まる場合は省略可能(だと思う) - リポジトリに
push
してパスワード入力が省略されることを確認する
$ git push
Everything up-to-date
おまけ:リモートサーバに公開鍵を登録する
-
ssh-copy-id
を使ってリモートサーバに 🔒 公開鍵をアップロードする-
-i ~/.ssh/id_ed25519.pub
: アップロードする 🔒 公開鍵のパス - 🔒 公開鍵の内容は、リモートサーバ上の
~/.ssh/authorized_keys
に追記される
-
公開鍵を新規に登録する
$ ssh-copy-id -i ~/.ssh/id_ed25519.pub アカウント名@リモートサーバ
/usr/bin/ssh-copy-id: INFO: Source of key(s) to be installed: "~/.ssh/id_ed25519.pub"
...(省略)...
アカウント名@リモートサーバ's password: ## リモートサーバのログインパスワードを入力
Number of key(s) added: 1
...(省略)...
-
ssh-copy-id
は追記形式なので、1 つリモートサーバに複数の公開鍵登録することができる - 公開鍵がすでに登録されていた場合も教えてくれるので安心
公開鍵がすでに登録されていた場合
$ ssh-copy-id -i ~/.ssh/id_ed25519.pub アカウント名@リモートサーバ
...(省略)...
/usr/bin/ssh-copy-id: WARNING: All keys were skipped because they already exist on the remote system.
(if you think this is a mistake, you may want to use -f option)
さらにおまけ:SSH 接続を簡単にする
- リモートサーバの SSH 接続を簡単にする設定を
~/.ssh/config
に追記する - SSH 接続先が複数ある場合や、サーバー名が長い場合にはとても便利
~/.ssh/config
Host エイリアス
HostName リモートサーバ
User アカウント
Discussion
納得できるかどうかの前に、妥当性に関してウラを取った方が良いと思います。SSHの公開鍵認証で使う秘密鍵・公開鍵はデジタル署名用途であって、南京錠で喩えられるものとは全く違います。
※仕組みを説明するたいていの解説記事がそもそもデマ
詳しくはQiita記事「SSHの公開鍵ってなに?」をどうぞ。
なるほど。ありがとうございます😊