(最終更新日:2024年4月)
✔以下のような方に向けて書かれた記事です
「SSH-keygenコマンドの機能が理解できない」
「SSH-keygenコマンドの使い方を学びたい」
「SSH-keygenコマンドの実践例を参考にしたい」
✔当記事を通して皆様にお伝えする内容
- SSH-keygenコマンドの基本知識
- SSH-keygenコマンドの使い方や応用方法
- SSH-keygenコマンドの実用的な例
当記事では、SSH-keygenコマンドの基本から応用まで幅広く、具体的なケースをもとに詳細に解説しています。
ぜひ、最後までお読みいただき、SSH-keygenコマンドの活用方法を習得してください。
SSH-Keygenコマンドの概要
こちらでは、「SSH-Keygenコマンド」の基本についてお伝えしていきます。
「SSH-Keygenコマンド」について知ることのメリットは、SSHキーの生成や管理、そしてセキュアなリモート操作ができるようになることです。
- SSH-Keygenとは?
- SSH-Keygenコマンドの目的と利点
SSH-Keygenとは?
SSH-Keygenは、公開鍵暗号を用いたSSH (Secure Shell) 通信のための鍵ペア(公開鍵と秘密鍵)を生成するためのコマンドラインツールです。
このツールは、オープンソースのSSH実装であるOpenSSHの一部として提供されています。
公開鍵と秘密鍵は、2つでひとつの割符などとイメージできます。
秘密鍵は主に手元に保管し、公開鍵をさまざまなサービスに連携します。
アクセスの際に公開鍵と秘密鍵がペアであることをもって、認証がおこなわれるのです。
SSH-Keygenコマンドの目的と利点
SSH-Keygenコマンドの主な目的は、安全な鍵ペアの生成とそれらの鍵の管理を容易にすることです。
鍵の生成だけでなく、以下のような多岐にわたる機能を持っています。
- パスフレーズの変更
- 公開鍵の抽出
- 鍵のフォーマット変換
SSH-Keygenコマンドを理解し、適切に使用することで、以下のような利点を得られます。
- セキュリティ
強力な公開鍵暗号を用いて、リモートサーバとの通信を保護できます。 - 便利性
パスワードなしでサーバにログインすることが可能になります(ただし、これは適切に管理されている場合に限ります)。 - 効率性
SSH鍵を使用すると、サーバとの一貫した接続を確立し、自動化スクリプトやバックアップソリューションを容易に設定することができます。
SSH-Keygenコマンドの構文とオプション
次に、SSH-Keygenコマンドの基本的な構文とそのオプションについて解説します。
こちらでは、鍵の生成時に選択できるキータイプやビット長の指定、そしてより高度なオプションについても説明します。
- 基本構文
- 主要オプション
基本構文
SSH-Keygenコマンドの基本的な構文は以下のとおりです。
ssh-keygen [options]
このコマンドを実行すると、ユーザのホームディレクトリに.ssh
という名前のディレクトリが作成され(すでに存在する場合はそのまま)、その中に公開鍵と秘密鍵が生成されます。
主要オプション
SSH-Keygenコマンドにはさまざまなオプションがありますが、ここでは主要なものをいくつか紹介します。
オプション名 | 説明 | 例 |
---|---|---|
-b | 鍵のビット数を指定 | ssh-keygen -t rsa -b 4096 |
-t | 鍵のタイプを指定例:rsa 、dsa 、ecdsa 、ed25519 など | ssh-keygen -t ed25519 |
-f | 出力する鍵ファイルの名前を指定 | ssh-keygen -f mykey |
-C | 鍵に関連付けるコメントを提供 | ssh-keygen -C "my@email.com" |
-N | 新しい秘密鍵のパスフレーズを指定 | ssh-keygen -N "myPassphrase" |
-P | 既存の鍵のパスフレーズを指定 | ssh-keygen -f mykey -P "oldPassphrase" |
-q | 何も表示せずに処理(静かなモード) | ssh-keygen -t rsa -b 4096 -f mykey -q |
-y | 指定された秘密鍵から公開鍵を表示 | ssh-keygen -y -f mykey |
-e | 鍵を別のフォーマットにエクスポート | ssh-keygen -e -f mykey.pub |
-c | 既存の秘密鍵または公開鍵に関連付けられたコメントを変更 | ssh-keygen -c -C "new_comment" -f mykey.pub |
-p | 既存の秘密鍵のパスフレーズを変更 | ssh-keygen -p -f mykey |
合わせて以下について詳しくご説明します。
- キータイプの選択
- ビット長の指定
キータイプの選択
-t
オプションを使ってキータイプを指定できます。例えば、RSA鍵を生成する場合は以下のようにします。
ssh-keygen -t rsa
SSH-Keygenは、rsa、dsa、ecdsa、ed25519など、さまざまなキータイプをサポートしています。
ビット長の指定
-b
オプションを使って鍵のビット長を指定できます。
例えば、2048ビットのRSA鍵を生成する場合は以下のようにします。
ssh-keygen -t rsa -b 2048
ビット長は鍵の長さ(つまり強度)を決定します。RSA鍵の場合、通常は2048ビット以上を推奨します。
SSH keygenのキータイプ4選
ssh-keygenコマンドで使うキータイプを理解しておきましょう。
キータイプは複数ありますが、よく使われるものはRSAとEd25519です。
- RSA (Rivest-Shamir-Adleman)
- DSA (Digital Signature Algorithm)
- ECDSA (Elliptic Curve Digital Signature Algorithm)
- Ed25519
RSA (Rivest-Shamir-Adleman)
最も広く使用されている公開鍵暗号アルゴリズムのひとつです。
2000ビット以上の鍵長が推奨されており、現在のところ以下のいずれかが一般的に使用されています。
- 2048ビット
- 3072ビット
- 4096ビット
適切な鍵長を持つRSA鍵は、現代の計算能力に対して非常に安全です。
DSA (Digital Signature Algorithm)
DSAは、DSS (Digital Signature Standard) の一部として1990年代初頭に導入。
元々は1024ビットの鍵長が標準でしたが、のちに鍵長の増加が推奨され、ほかのキータイプに変わられるようになります。
RSAに比べてあまり一般的ではありません。
その具体的な理由はこちら。
- 特定の使用ケースに特化
DSAはデジタル署名のために設計されており、暗号化やキー交換には直接使用されません。この特定のニッチな使用ケースが、多機能な他のアルゴリズムに比べてその採用を制限しています。 - 演算速度
DSAの署名生成は比較的遅いとされています。特に、高いセキュリティを求める場面では、RSAやECDSAに比べてDSAは不利です。 - 楕円曲線の登場
ECDSA (Elliptic Curve Digital Signature Algorithm) などの楕円曲線をベースにしたアルゴリズムの登場により、同等のセキュリティを短い鍵長で提供することが可能となりました。これにより、DSAよりも効率的な選択肢が増えたため、DSAの採用が減少しました。 - 信頼性の問題
DSAの実装や運用において、乱数生成が正しく行われない場合、私有鍵が漏洩するリスクがあります。このような脆弱性が過去に何度か発覚しており、そのたびにDSAの信頼性に疑問が投げかけられました。
ECDSA (Elliptic Curve Digital Signature Algorithm)
楕円曲線暗号を基にした公開鍵暗号アルゴリズムです。
同等のセキュリティを提供するために、RSAやDSAよりもはるかに短い鍵長を使用できるのが利点。
主には以下の鍵長が一般的に使用されています。
- 256ビット
- 384ビット
- 521ビット
ただし次のEd25519と比べて、正確かつ安全な実装が複雑であるという特徴があります。
とくに、乱数の生成に関する問題やサイドチャネル攻撃に対する脆弱性が存在するため、実装が困難な場合があるのです。
Ed25519
もうひとつの楕円曲線暗号に関連する公開鍵暗号アルゴリズムですが、特定の楕円曲線を使用します。
特徴は以下のとおり。
- 高速
- 高いセキュリティ
- 短い鍵長(256ビット)
署名生成における乱数の必要性を排除する設計となっているなど、最近のSSH実装において推奨されるキータイプのひとつです。
鍵ペアの生成と管理
ここでは、実際にSSH-Keygenコマンドを使って鍵ペアの生成と管理を行う方法について詳しく見ていきましょう。
- 鍵ペアの作成
- パスフレーズの設定と変更
- 鍵ファイルの変換方法
- コメントの変更
鍵ペアの作成
まず、鍵ペアの生成から始めます。
以下のコマンドを実行して、2048ビットのRSA鍵ペアを作成しましょう。
ssh-keygen -t rsa -b 2048
コマンドを実行すると、鍵の保存場所とパスフレーズの入力を求められます。
特に指定がなければ、デフォルトの保存場所(通常は~/.ssh/
ディレクトリ)にid_rsa
(秘密鍵)とid_rsa.pub
(公開鍵)の名前で鍵ファイルが作成されます。
パスフレーズの設定と変更
鍵を作成する際に、パスフレーズを設定することで鍵のセキュリティを高められます。
パスフレーズは鍵を使うたびに入力する必要がありますが、秘密鍵が盗まれてもパスフレーズがなければ使えないようになっているのがメリット。
パスフレーズを設定した場合、あとからの変更も可能です。
その際には-p
オプションを使用しましょう。
ssh-keygen -p
コマンドを実行すると、既存のパスフレーズの入力と新しいパスフレーズの入力を求められます。
鍵ファイルの変換方法
SSH-Keygenコマンドは、鍵ファイルの変換もサポートしています。
たとえば、OpenSSH形式の鍵をほかの形式(PEM形式など)に変換できます。
その際には-m
オプションと-e
オプションを使用します。
ssh-keygen -e -m PEM -f ~/.ssh/id_rsa > id_rsa.pem
このコマンドは、~/.ssh/id_rsa
の秘密鍵をPEM形式に変換し、id_rsa.pem
という名前のファイルに出力します。
コメントの変更
-cと-Cオプションでコメントを変更できます。
コメントとは、.pubファイル(公開鍵)ファイルで、以下の<コメント>に該当する箇所のことです。
ssh-ed25519 AXXXlZDXXXXXXXXXXXXXXXXXXXXXXXXXXX <コメント>
多くの場合は、そのホスト名などが含まれています。
変更は以下のようにします。
ssh-keygen -c -C "新しいコメント"
authorized_keysを覗いたときに、わかりやすいものがおすすめです。
サーバーへの公開鍵の登録
次に、生成した公開鍵をサーバーに登録する方法について詳しく見ていきましょう。
- 公開鍵のアップロード
- authorized_keysファイルへの追加
- SSH接続テスト
公開鍵のアップロード
まず、公開鍵(通常はid_rsa.pub
)をサーバーにアップロードする必要があります。
これはSCP(Secure Copy)コマンドなどを使用しておこないましょう。
以下がそのアップロード例です。
scp ~/.ssh/id_rsa.pub user@hostname:~/
user
はあなたのサーバー上のユーザー名、hostname
はサーバーのホスト名またはIPアドレスを表します。
あなたのホームディレクトリ(~/.ssh/id_rsa.pub
)の公開鍵を、サーバーのユーザーのホームディレクトリにコピーするコマンドです。
authorized_keysファイルへの追加
次に、サーバー上で公開鍵を~/.ssh/authorized_keys
ファイルに追加する必要があります。
このファイルには、SSHによる接続を許可する公開鍵が一行ごとにリストされているからです。
以下に、公開鍵を追加するコマンドを示します。
cat ~/id_rsa.pub >> ~/.ssh/authorized_keys
id_rsa.pub
の内容がauthorized_keys
ファイルに追加され、その公開鍵を持つユーザーからのSSH接続が許可されます。
これらはサーバー上で実行する内容です。
SSH接続テスト
最後に、新しく設定した公開鍵を使用してSSH接続をテストしましょう。
以下のコマンドを実行してください。
ssh -i ~/.ssh/id_rsa user@hostname
user
はあなたのサーバー上のユーザー名、hostname
はサーバーのホスト名またはIPアドレスを表します。
-i
オプションは、使用する秘密鍵のパスを指定するもの。
接続の成功を確認してください。
コマンドの具体例は以下のとおりです。
ssh -i ~/.ssh/id_rsa ubuntu@192.168.11.24
ホスト名はIPアドレスでも問題ありません。
実例】GitHubでSSHを設定する
GitHubやDigitalOceanなどのクラウドサービスであれば、アカウント設定などにSSH Keysを入力するフォームが存在します。
手順は以下のとおりです。
ローカル(PC)上で公開鍵をコピー
ローカル(PC)上で公開鍵をコピー
$ cat id_rsa.pub
ローカルコンピューターの公開鍵を出力し、コピペしてください。
アカウント設定で入力
githubページ > Account settings
よくあるトラブルシューティング
ここでは、SSH鍵認証がうまくいかない場合の一般的な対処法をいくつか紹介します。
公開鍵認証を使用したSSH接続は、初めて設定する際や、設定後に問題が発生した場合のトラブルシューティングは難しいことがあるからです。
- 鍵認証がうまくいかない場合の対処法
- パーミッション周りの問題
- サーバー設定の確認ポイント
鍵認証がうまくいかない場合の対処法
鍵認証がうまくいかない場合、最初に確認するべきは以下の項目です。
- 公開鍵がサーバーの
~/.ssh/authorized_keys
に正しく追加されているか。 - 秘密鍵がクライアントマシンの
~/.ssh
ディレクトリに存在し、適切なパーミッションが設定されているか。 - SSHの設定(
/etc/ssh/sshd_config
)が公開鍵認証を許可しているか。
これらの項目を確認しても問題が解決しない場合、ssh -v
を使ってSSH接続を試み、デバッグ情報を表示するとよいでしょう。
この出力は、問題の診断に役立つ情報を提供します。
パーミッション周りの問題
SSHは鍵ファイルや設定ファイルのパーミッション(許可されている操作)に非常に敏感です。
例えば、秘密鍵のパーミッションが広すぎる(ほかのユーザーに読み取り可能など)と、セキュリティ上の理由からSSHは接続を拒否します。
適切なパーミッション設定は以下の通りです。
~/.ssh/id_rsa
(秘密鍵): 600~/.ssh/id_rsa.pub
(公開鍵): 644~/.ssh/authorized_keys
(サーバーの公開鍵リスト): 600~/.ssh
(ディレクトリ自体): 700
これらのパーミッションは、chmod
コマンドを使用して設定できます。
サーバー設定の確認ポイント
最後に、サーバーのSSH設定が公開鍵認証を許可しているか確認する必要があります。
SSHの設定は、以下のどちらかのファイルで確認してください。
/etc/ssh/sshd_config
/etc/ssh/ssh_config
このファイル内で PubkeyAuthentication
と PasswordAuthentication
の設定を確認しましょう。
公開鍵認証を有効にするには、PubkeyAuthentication
を yes
に、パスワード認証を無効にするには、PasswordAuthentication
を no
に設定します。
設定を変更した場合、SSHサーバーを再起動する必要があります。
Ubuntuでの例は以下のいずれかです。
sudo systemctl restart sshd
sudo systemctl restart ssh
まとめ
当記事では、SSH-Keygenコマンドの重要性と、安全なSSHキーの作成と管理について解説しました。
SSH-Keygenコマンドは、公開鍵と秘密鍵のペアを生成し、管理するための重要なツール。
SSH公開鍵認証は、SSH接続のセキュリティを強化するための有効な手段なので、正しく理解しましょう。