🔒

GitHubとGitLabにSSH鍵を登録したい

2020/12/11に公開
2

基本的な操作手順

  1. コマンドラインを使って 🔒 公開鍵/🔑 秘密鍵のペアを作成
  2. GitHub/GitLab に 🔒 公開鍵を登録する
  3. ローカルのssh-agentに 🔑 秘密鍵を登録する
  4. おまけ:リモートサーバに 🔒 公開鍵を登録する

参考ドキュメント

🔒 公開鍵/🔑 秘密鍵のペアを作成

  • 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/configssh-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

angel_p_57angel_p_57

ずっと前に公開鍵暗号の仕組みに関して調べたときに、いくつか解説記事を読み一番納得できた例えでした。

納得できるかどうかの前に、妥当性に関してウラを取った方が良いと思います。SSHの公開鍵認証で使う秘密鍵・公開鍵はデジタル署名用途であって、南京錠で喩えられるものとは全く違います。
※仕組みを説明するたいていの解説記事がそもそもデマ
詳しくはQiita記事「SSHの公開鍵ってなに?」をどうぞ。