概要
あんまり頻繁に使わないため、備忘録ついでに初心者向けに情報をまとめて残す。
SSH 鍵を生成する ssh-keygen
コマンドの基本的な使い方
その際、ファイル名を指定して生成する方法や、その他関連コマンドなどの備忘録
利用用途
GitHub や GitLab 等のサービスとの SSH 通信時に必要になる鍵ファイル(公開鍵/秘密鍵)を生成する
手順
コマンドの基本形
基本的に鍵生成コマンドは以下。これを実行するだけでPC内にペアの鍵が生成される。
ssh-keygen
しかし、これではセキュリティが甘く、生成される鍵の管理もしづらいので、以下のようにオプションを付与するのが実際の使い方。
現在の最新手順(推奨)
-C
と -f
の書き方はサンプル
ssh-keygen -t ed25519 -C "user_name@device_name" -f ~/.ssh/id_ed25519_user_name
オプションの意味(詳細は後述)
-
-t
: 暗号方式(Ed25519 方式 を指定) -
-C
: コメント(任意だが、「ユーザ名@デバイス名」 がオススメ) -
-f
: 鍵ファイルの生成場所(~/
はホームディレクトリを表す)
実例
# SSH 鍵生成コマンドを実行
$ ssh-keygen -t ed25519 -C "to3izo@macstudio_m2" -f ~/.ssh/id_ed25519_to3izo
# 実行後: 対話式の質問が始まる
Generating public/private ed25519 key pair. # 訳:「公開鍵/秘密鍵 を生成します」
Enter passphrase for "/Users/to3izo/.ssh/id_ed25519_to3izo" (empty for no passphrase):
# → そのままエンターキーでもOK
Enter same passphrase again: # → そのままエンターキーでもOK
# 秘密鍵「id_ed25519_to3izo」生成
Your identification has been saved in /Users/to3izo/.ssh/id_ed25519_to3izo
# 公開鍵「id_ed25519_to3izo.pub」生成
Your public key has been saved in /Users/to3izo/.ssh/id_ed25519_to3izo.pub
The key fingerprint is: # 指紋 (キーマップ) を表示
SHA256:******************* to3izo@macstudio_m2
The key's randomart image is:
+--[ED25519 256]--+
| x |
| xxxxxxxxxxxx |
| xxxxxxxx |
| xx xx xxx |
|xxx xxxxxx |
| xxxx xxx |
|xx xx xxxxx |
+----[SHA256]-----+
→ 上記コマンドを実行すると ~/.ssh/
に id_ed25519_to3izo
という秘密鍵と、id_ed25519_to3izo.pub
という公開鍵を生成する。
Tips
複数の鍵を作成する場合は、他の設定ファイル等と混在して見づらくなるので、~/.ssh/
の中に更に任意のディレクトリを用意して、その中にまとめるという方法もあります。
その後、「公開鍵」(.pub が付いたファイル名) の方を、以下のように cat コマンド等でファイルの中身を表示する。
# コマンド実行で中身を表示
$ cat ~/.ssh/id_ed25519_to3izo.pub
# 実行結果 (ファイルの中身)
ssh-ed25519 *****(中略)***** to3izo@macstudio_m2
ssh-rsa *****(中略)***** to3izo3@example.com
表示された 「ssh-」 から始まる文字列を全てコピーして、GitHub 等の利用サービスの SSH Key 登録画面にペーストして使用する。
すると、次回から公開鍵を登録したサイトとの SSH 通信ができるようになる。
従来の手順(非推奨)
従来の実行するコマンドの例は以下だった(-t
未指定(デフォルト)の暗号方式は RSA 方式 となる)
ssh-keygen -C "comment" -f id_rsa_file_name
実際に実行すると以下のような動きをする
# SSH 鍵生成コマンドを実行 (コメントはメールアドレスとかでも良い)
$ ssh-keygen -C "to3izo@example.com" -f ~/.ssh/id_rsa_to3izo
# 実行後
Generating public/private rsa key pair.
Enter passphrase (empty for no passphrase):
Enter same passphrase again:
Your identification has been saved in id_rsa_to3izo # 秘密鍵「id_rsa_to3izo」生成
Your public key has been saved in id_rsa_to3izo.pub # 公開鍵「id_rsa_to3izo.pub」生成
The key fingerprint is:
SHA256:******************* to3izo@example.com
The key's randomart image is:
+---[RSA 3072]----+
| xxxxx |
| xx x |
| xx xx |
| x xx xxx |
+----[SHA256]-----+
# 処理完了
→ 上記コマンドを実行すると ~/.ssh/
に id_rsa_to3izo
という秘密鍵と、id_rsa_to3izo.pub
という公開鍵を生成する。
# コマンド実行で中身を表示
$ cat ~/.ssh/id_rsa_to3izo.pub
# 実行結果 (ファイルの中身)
ssh-rsa *****(中略)***** to3izo3@example.com
暗号方式は RSA じゃダメなのか?
基本的にはこれから作るなら "Ed25519" を採用しましょう。
暗号方式 | 現状の扱い | 備考 |
---|---|---|
Ed25519 | GitHub 推奨・高速・短い鍵長 | より強固な暗号。執筆現在での事実上のデフォルト |
RSA (≥3072 bit) | まだ利用可 | コマンド上のデフォルト |
DSA / 1024 bit RSA | GitHub で登録不可 | 2022 年に受付終了 (GitHub Docs) |
※ 未だに RSA 方式で記載される記事や解説も多いので、混乱するかもしれませんが、Ed25519 を推奨します(参考: Brandon Checketts)
コマンドの意味
基本コマンド
ただ鍵を生成するだけのコマンド
# 鍵生成コマンド
ssh-keygen
デフォルトの生成ファイルの出力先は ~/.ssh/
デフォルトの生成ファイル名は id_rsa
と id_rsa.pub
名前を指定して作成
ssh-keygen でファイル名を指定して作成する方法。
-f
オプションでファイル名(厳密には保存先)が決められる
# 例1. ファイル名を指定して鍵生成
ssh-keygen -f id_rsa_file_name
# 例2. ファイルのフォルダも指定する場合
ssh-keygen -f ./path/to/directory/id_rsa_file_name
標準出力なしで作成
-q
標準出力(実行結果をコンソールに表示すること)を無効にする = キーマップが出ない
ssh-keygen -q -f id_rsa_file_name
コメントの指定
-C
オプション
「ユーザ名@ホスト名
(デフォルト)」以外にする場合に使用
別のメールアドレスとかを使用する(xxx@example.com)
ssh-keygen -C comment -f id_rsa_file_name
暗号方式の指定
-t
オプション
暗号化形式を「rsa(デフォルト)」以外にする場合、「dsa」「ecdsa」「ed25519」から指定
ssh-keygen -t ed25519 -f id_rsa_file_name
fingerprint の指定
-E
オプション
鍵のfingerprintを「sha256(デフォルト)」以外にする場合、「md5」指定
ssh-keygen -E md5 -f id_rsa_file_name
エラー: SSH鍵の権限がオープン過ぎて怒られた場合
何かしら SSH 通信を利用したときに、以下の場合は、SSH キーの権限を変更する必要があります。
発生するエラー: Permissions 0644 for 'id_rsa_xxxxx' are too open.
@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
@ WARNING: UNPROTECTED PRIVATE KEY FILE! @
@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
Permissions 0644 for '/Users/xxxxx/.ssh/id_rsa_xxxxx' are too open.
It is required that your private key files are NOT accessible by others.
This private key will be ignored.
Load key "/Users/xxxxx/.ssh/id_rsa_xxxxx": bad permissions
git@github.com: Permission denied (publickey).
👉 要訳:「秘密鍵のパーミッションが "644" なので、他のユーザーからアクセスできるような権限では使えないよ !」
権限を変更する
chmod
コマンドで、書き込み・読み取り・実行権限を変更する(詳しい説明は割愛)
# 対象のキーを指定(600 もしくは 400)
chmod 600 id_rsa_xxxxx
おまけ
生成したSSH鍵の公開鍵をコピーするときは、以下でも可能
macOSの場合
pbcopy < ~/.ssh/ファイル名.pub
Windows で Git Bash など使っていた場合
clip < ~/.ssh/id_rsa.pub