💭

秘密鍵・公開鍵の生成及びgithub利用

2023/03/01に公開

はじめに

今まで必要に応じて、都度都度検索をかけて解決していたので、個人的な備忘録として残します
基本は、こちらを参考にしております(他のサイトも参考にしております)
https://qiita.com/shizuma/items/2b2f873a0034839e47ce

環境は、chrome bookを利用しています

公開鍵・秘密鍵の作成

基本、鍵が入ってるフォルダはこちらになります

cd ~/.ssh

また、クライアントとしてSSHを利用する場合、このディレクトリにある秘密鍵がデフォルトで利用されます

鍵生成コマンド

ssh-keygen

オプションは色々ありますが、デフォルトはこれで大丈夫と思っています
(参考サイトでは、-tオプションがありましたが、デフォルトが「rsa」だったので不要と判断しました)

オプション一覧

ssh-keygenの主なオプション

短いオプション 意味
-t 方式 作成する鍵の暗号化形式を「rsa」(デフォルト)、「dsa」「ecdsa」「ed25519」から指定する
-b ビット数 作成する鍵のビット数を指定する(RSA形式の場合、デフォルトは2048bit)
-a ラウンド数 ed25519形式で生成する際のKDF(Key Derivation Function)ラウンド数を指定する。数が大きいと暗号の耐性が上がるが、処理に時間がかかるようになる
-f ファイル ファイルを指定する(生成または読み出すファイルを指定)。ただし、併用するオプションによって意味が変化する(通常は鍵ファイル)
-p パスフレーズを変更する(対話形式で元のパスフレーズを1回、新しいパスフレーズを2回指定する)。元のパスフレーズは「-P」オプション、新しいパスフレーズは「-N」オプションで指定可能
-N パスフレーズ 新しく設定するパスフレーズを指定する
-P パスフレーズ 元のパスフレーズを指定する
-C コメント コメントを指定する(デフォルトは「ユーザー名@ホスト名」。「-C ""」でコメントを削除)
-E 形式 鍵の指紋(fingerprint)を表示する際の形式を「sha256」(デフォルト)か「md5」で指定する

ssh-keygenの主なオプション(known_hosts関連)

短いオプション 意味
-F ホスト名 指定したホスト名を、鍵ファイルとともに保存されている「known_hosts」ファイルから探して表示する(-fオプションでknown_hostsファイルを指定可能、-lオプションで対応する指紋を表示可能)
-H 「known_hosts」ファイルを更新する(-fオプションでknown_hostsファイルを指定可能、元のファイルは拡張子.oldで保存される)
-R ホスト名 指定したホストに属する鍵を全て取り除く(-fオプションでknown_hostsファイルを指定可能)
-r ホスト名 指定したホストに対応する指紋を表示する(-fオプションでknown_hostsファイルを指定可能)

ssh-keygenの主なオプション(変換関連)

短いオプション 意味
-i 暗号化されていない秘密鍵ファイルまたは公開鍵ファイルを読み出し、OpenSSH互換形式に変換してから標準出力に出力する(変換元のファイルは-fオプションまたは対話式で指定、-mオプションで変換元の鍵の形式を指定できる)
-e OpenSSH形式の秘密鍵ファイルまたは公開鍵ファイルを読み出し、RFC 4716形式または-mオプションで指定した形式で標準出力に出力する(変換元のファイルは-fオプションまたは対話式で指定)
-m 形式 「-i」オプションで入力する鍵の形式を、「-e」オプションで出力する鍵の形式を、「RFC4716」(デフォルト)、「PKCS8」「PEM」から指定する
-y OpenSSH形式の秘密鍵ファイルを読み出し、OpenSSH形式の公開鍵を標準出力に出力する

ssh-keygenの主なオプション(証明書関連)

短いオプション 意味
-s CA鍵 指定したCA鍵で公開鍵に署名をする
-I 秘密鍵 公開鍵に証明する際に使用する鍵を指定する
-h 鍵に署名する際、ユーザー証明書の代わりにホスト証明書を作成する
-D ライブラリ PKCS#11トークンのライブラリを指定し、公開鍵をダウンロードする(※1)
-n 名前 証明書に含めるユーザー名またはホスト名を指定する。名前は複数指定可能
-O オプション 鍵に署名する際に使用する証明書のオプションを指定する(詳細は「man ssh-keygen」の「CERTIFICATES」セクション参照)
-V 期間 証明書に署名する際の有効期間を指定する。「YYYYMMDD」または「YYYYMMDDHHMMSS」で期限切れとなる日時を指定するか、「:」で区切って「開始:終了」のように指定する。「+」「-」記号で期間を示すことも可能
-z シリアル番号 証明書に埋め込むシリアル番号を指定する
-L 証明書の内容を表示する
-k KRL(Key Revocation List、鍵失効リスト)ファイルを生成する(「-f」で出力ファイルを指定、「-u」を併用するとファイルに追加、「-s」でCA鍵のパス、「-z」でシリアル番号を指定)
-Q -fでKRLファイルを指定し、鍵がKRLで失効したものとして指定されているかを検査する(「-Q -f KRLファイル 対象ファイル」で実行)

鍵の名前変更なし、パスフレーズなしで実行すると、以下のように実行され、最後のイメージみたいなのが表示されていれば完了となります

先程実行された内容のこの部分が、公開鍵の出力先となります

鍵の取得

まずは鍵を取得します(クリップボードへコピーしたいので、xselを利用します)
インストール

sudo apt install -y xclip

鍵をクリップボードにコピー

cat ~/.ssh/id_rsa.pub | xclip -selection c

WSL利用の場合は、こちらが使えます

cat ~/.ssh/id_rsa.pub | clip.exe

githubへの鍵登録方法

https://github.com/settings/ssh
上記のURLにて登録が可能です

画面右上の「Add SSH key」のボタンを押します

画面のkeyにクリップボードの内容をコピーし、(タイトルは、自分がわかり易い名前で登録)
「Add SSH key」のボタンを押して登録します

確認

ssh -T git@github.com

以下のように帰ってくれば成功となります

gitlabへの鍵登録方法

githubと似たような画面構成になっています

画面右上のユーザーボタンを押した後「edit profile」のボタンを押します

左メニューより「SSHキー」のボタンを押す

画面のキーにクリップボードの内容をコピーし、(タイトルは、自分がわかり易い名前で登録)
「キーを追加」のボタンを押して登録します

ubuntuへの鍵登録方法

ざっくりいくと以下の手順

  1. id_rsa.pubを取得
  2. id_rsa.pubをサーバーに複製
  3. id_rsa.pubをauthorized_keysに名称変更
  4. authorized_keysを~/.ssh に設置
  5. authorized_keysのパーミッションを600に変更

登録方法は何通りか方法がありますので、自分にあったやり方を選んでください

ssh-copy-idを利用したやり方

「ssh-copy-id」は暗号や認証を使って通信を行うためのプロトコル「SSH」(Secure SHell)の公開鍵を接続先に登録するコマンドです。
上記の手順を1コマンドで全てやってくれる便利なコマンドです

入ってるかどうかの確認

ssh-copy-id

こんな感じで使い方が表示されれば利用可能なはずです

パスワードベース

ssh-copy-id <USER>@<target_hostname>

鍵ベース

ssh-copy-id -i <identity_file> <USER>@<target_hostname>

SSHを使用した1コマンドでのやり方

上記の手順を1コマンドでやるやり方です

cat ~/.ssh/id_rsa.pub | ssh <USER>@<target_hostname> "mkdir -p ~/.ssh && touch ~/.ssh/authorized_keys && chmod -R go= ~/.ssh && cat >> ~/.ssh/authorized_keys"

全てを手動でのやり方

id_rsa.pubを取得

取得は、githubと同じですここ

サーバー内での操作

ディレクトリが存在しない可能性がありますので、以下のコマンドを実行します
ディレクトリがなければ作成。作成済みなら何もしません

mkdir -p ~/.ssh

クリップボードにある鍵情報をauthorized_keysに追記します

xclip -selection c -o >> ~/.ssh/authorized_keys

最後に権限を変更します

chmod 600 ~/.ssh/authorized_keys

Discussion