【簡単】ssh-keygenの基本|認証鍵でSSH接続する方法

※本サイトにはプロモーション・広告が含まれています。

(最終更新日:2023年9月)

✔以下のような方に向けて書かれた記事です

「SSH-keygenコマンドの機能が理解できない」
「SSH-keygenコマンドの使い方を学びたい」
「SSH-keygenコマンドの実践例を参考にしたい」

✔当記事を通して皆様にお伝えする内容

  • SSH-keygenコマンドの基本知識
  • SSH-keygenコマンドの使い方や応用方法
  • SSH-keygenコマンドの実用的な例

当記事では、SSH-keygenコマンドの基本から応用まで幅広く、具体的なケースをもとに詳細に解説しています。

ぜひ、最後までお読みいただき、SSH-keygenコマンドの活用方法を習得してください。

筆者プロフィール

筆者プロフィールアイコン

【現職】プロジェクトマネージャー/SE(元外資系金融機関営業)

【副業】ブログ(月間15万PV)/YouTube/Web・アプリ制作

コミュニケーション × ビジネススキル × 文章力 × プログラミングスキルを活かし、30後半からのIT系職へシフト。当サイトでは、実際に手を動かせるWebアプリの開発を通じて、プログラミングはもちろん、IT職に必要な情報を提供していきます。

【当ブログで紹介しているサイト】

当サイトチュートリアルで作成したデモ版日報アプリ

Django × Reactで開発したツール系Webアプリ

✔人に見せても恥ずかしくないコードを書こう

「リーダブルコード」は、わかりやすく良いコードの定義を教えてくれる本です。

  • 見るからにきれいなコードの書き方
  • コードの分割方法
  • 変数や関数の命名規則

エンジニアのスタンダートとすべき基準を一から解説しています。

何回も読むのに値する本なので、ぜひ手にとって読んでみてください。

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コマンドを理解し、適切に使用することで、以下のような利点を得られます。

  1. セキュリティ
    強力な公開鍵暗号を用いて、リモートサーバとの通信を保護できます。
  2. 便利性
    パスワードなしでサーバにログインすることが可能になります(ただし、これは適切に管理されている場合に限ります)。
  3. 効率性
    SSH鍵を使用すると、サーバとの一貫した接続を確立し、自動化スクリプトやバックアップソリューションを容易に設定することができます。

SSH-Keygenコマンドの構文とオプション

次に、SSH-Keygenコマンドの基本的な構文とそのオプションについて解説します。

このセクションでは、鍵の生成時に選択できるキータイプやビット長の指定、そしてより高度なオプションについても説明します。

  • 基本構文
  • 主要オプション

基本構文

SSH-Keygenコマンドの基本的な構文は以下のとおりです。

ssh-keygen [options]

このコマンドを実行すると、ユーザのホームディレクトリに.sshという名前のディレクトリが作成され(すでに存在する場合はそのまま)、その中に公開鍵と秘密鍵が生成されます。

主要オプション

SSH-Keygenコマンドにはさまざまなオプションがありますが、ここでは主要なものをいくつか紹介します。

オプション名説明
-b鍵のビット数を指定ssh-keygen -t rsa -b 4096
-t鍵のタイプを指定例:rsadsaecdsaed25519など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鍵は、現代の計算能力に対して非常に安全です。

RSAのビット数は、RSA公開鍵暗号アルゴリズムにおける鍵の長さを示す数値。

このビット数の増加に伴い、鍵の強度(暗号の安全性)も増加しますが、鍵のビット数が増えると、暗号操作(暗号化、復号化、署名、署名の検証など)の計算時間も増えてしまいます。

過去の暗号技術の進展やコンピュータの計算能力の向上を考慮すると、以下のような推奨されるビット数があります。

  • 512ビット: 1990年代には安全とされていましたが、現在は弱すぎると考えられている
  • 1024ビット: 2000年代初頭まで一般的に使用されていましたが、現在は適切なセキュリティを提供しないと広く考えられている
  • 2048ビット: 現在、多くの用途において最小の推奨鍵長となっている
  • 3072ビットおよび4096ビット: 高いセキュリティが要求される場合や、将来的なセキュリティを考慮する場合に選択されることが多い

今日の計算能力を持つコンピュータに対して、2048ビットまたは4096ビットのRSA鍵は十分に強力と考えられています。

DSA (Digital Signature Algorithm)

DSAは、DSS (Digital Signature Standard) の一部として1990年代初頭に導入。

元々は1024ビットの鍵長が標準でしたが、のちに鍵長の増加が推奨され、ほかのキータイプに変わられるようになります。

RSAに比べてあまり一般的ではありません。

その具体的な理由はこちら。

  1. 特定の使用ケースに特化
    DSAはデジタル署名のために設計されており、暗号化やキー交換には直接使用されません。この特定のニッチな使用ケースが、多機能な他のアルゴリズムに比べてその採用を制限しています。
  2. 演算速度
    DSAの署名生成は比較的遅いとされています。特に、高いセキュリティを求める場面では、RSAやECDSAに比べてDSAは不利です。
  3. 楕円曲線の登場
    ECDSA (Elliptic Curve Digital Signature Algorithm) などの楕円曲線をベースにしたアルゴリズムの登場により、同等のセキュリティを短い鍵長で提供することが可能となりました。これにより、DSAよりも効率的な選択肢が増えたため、DSAの採用が減少しました。
  4. 信頼性の問題
    DSAの実装や運用において、乱数生成が正しく行われない場合、私有鍵が漏洩するリスクがあります。このような脆弱性が過去に何度か発覚しており、そのたびにDSAの信頼性に疑問が投げかけられました。

ECDSA (Elliptic Curve Digital Signature Algorithm)

楕円曲線暗号を基にした公開鍵暗号アルゴリズムです。

同等のセキュリティを提供するために、RSAやDSAよりもはるかに短い鍵長を使用できるのが利点。

主には以下の鍵長が一般的に使用されています。

  • 256ビット
  • 384ビット
  • 521ビット

ただし次のEd25519と比べて、正確かつ安全な実装が複雑であるという特徴があります。

とくに、乱数の生成に関する問題やサイドチャネル攻撃に対する脆弱性が存在するため、実装が困難な場合があるのです。

Ed25519

もう1つの楕円曲線暗号に関連する公開鍵暗号アルゴリズムですが、特定の楕円曲線を使用します。

特徴は以下のとおり。

  • 高速
  • 高いセキュリティ
  • 短い鍵長(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

このファイル内で PubkeyAuthenticationPasswordAuthentication の設定を確認しましょう。

公開鍵認証を有効にするには、PubkeyAuthenticationyes に、パスワード認証を無効にするには、PasswordAuthenticationno に設定します。

設定を変更した場合、SSHサーバーを再起動する必要があります。

Ubuntuでの例は以下のいずれかです。

sudo systemctl restart sshd
sudo systemctl restart ssh

まとめ

当記事では、SSH-Keygenコマンドの重要性と、安全なSSHキーの作成と管理について解説しました。

SSH-Keygenコマンドは、公開鍵と秘密鍵のペアを生成し、管理するための重要なツール。

SSH公開鍵認証は、SSH接続のセキュリティを強化するための有効な手段なので、正しく理解しましょう。

タイトルとURLをコピーしました