LinuxでのSSHキーの生成

1. 概要

このチュートリアルでは、SSHキーの基本と、LinuxでSSHキーペアを生成する方法について説明します。

2. セキュアシェル(SSH)

  • Secure Shell(SSH)は、公開キー暗号化*を利用してクライアントとサーバー間の通信を暗号化する安全なリモートログインプロトコルです。

2.1. 公開鍵暗号化

一般に、公開キー暗号化(非対称暗号化とも呼ばれます)には、互いに補完するキーペア(公開キーと秘密キー)が必要です。 *公開キーを使用して、対応する秘密キーで暗号化されたメッセージを解読します。その逆も同様です。
*暗号化したのと同じキーでメッセージを復号化できないことに注意してください*。 したがって、対応する秘密キーで暗号化されている場合、秘密キーを使用してメッセージを復号化することはできません。
同様に、同じ公開キーで暗号化されている場合、公開キーを使用してメッセージを復号化することはできません。 したがって、秘密鍵を共有しない限り、公開鍵を自由に共有できます。これは、両方がメッセージの暗号化と復号化に必要であるためです。

2.2. 送信者の認証

SSHは、公開鍵暗号化を使用して、クライアントが本人であることを保証します。 まず、クライアントは、クライアントの公開鍵をサーバーに送信してサーバーに登録する必要があります。 *サーバーはこの公開鍵を認証済みクライアントのリストに記録し、IDを割り当てます*。 サーバーとクライアントの両方がこのIDを知っています。
登録が完了すると、クライアントは後で次の手順を使用してサーバーで認証できます。
  1. クライアントとサーバーは、を使用して秘密鍵に同意します
    Diffie-Hellman鍵交換アルゴリズム

  2. クライアントはサーバーにIDを送信します。

  3. サーバーは、受信したIDがそのリストにあることを確認するためにチェックします
    認証済みクライアント。

  4. サーバーは乱数を作成し、クライアントの
    受信したIDに対応する公開キー、およびクライアントに送信します。

  5. クライアントは、秘密鍵で乱数を解読します。

  6. クライアントは乱数と秘密鍵を組み合わせてハッシュ化し、
    それをサーバーに送信します。

  7. サーバーは、組み合わされた乱数とシークレットのハッシュを計算します。

  8. サーバーは、計算されたハッシュと
    クライアント。

    計算されたハッシュと受信されたハッシュが一致する場合、認証は成功です。
    基本的に、* SSHは、記録された公開キーでデータを暗号化してクライアントに送信し、クライアントが同じデータを復号化して返送することを要求することにより、クライアントをテストします*。 クライアントが同じデータを正常に復号化して送り返すことができる場合、記録された公開キーに関連付けられた秘密キーが必要です。 したがって、クライアントは本人であると主張します。

3. SSHキーの生成

当然のことながら、https://github.com/ [GitHub]やhttps://about.gitlab.com/[GitLab]など、最も人気のあるWebサイトの多くはSSH認証を使用しています。
これらのWebサイトでこのメカニズムを使用するには、SSHキーペアを作成する必要があります。 現在のユーザーのキーペアを生成するには、次を実行します。
ssh-keygen
キーペア、パスフレーズ、およびパスフレーズの確認を保存する場所を入力するよう求められます。 各プロンプトでEnterキーを押して、3つすべてのデフォルトを選択します。
デフォルトでは、_ssh-keygen_はキーペアを_〜/ .ssh_に保存します。 そのディレクトリには、秘密鍵と公開鍵にそれぞれ対応する2つのファイル_id_rsa_と_id_rsa.pub_があります。
*秘密鍵(_id_rsa_)は決して共有しないでください。*
さらに、_cat〜/ .ssh / id_rsa.pub_を実行して、公開キーの内容を表示できます。 出力は次のようになります。
ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABAQD1Y6mRUepVaEZ+6ghg+ju/iirHQqQbuE3Wy6aEb+b
nKlzqFgAyGFuQSw+DuDqyZkWFd9O4Al4TOr7bQsS6Xji2GUt0ikr9/gv2pVwUd9LBiEAks+HEfb4tMO
77FMGQ4BytU9ssYCjCRT4F7rx0li0qUqhgao7syaxu4PTI+p+Auz1Y1wwVf7T4Pwd9YFcThTa6+Lr5r
vbft8Ws2KwHDEzNH2lf9UoiN1Lcd5szHpT1iXz9jvb3Fmd2I8d8seThde5WHI7N6t+ojyqntIc9bMW9
TL2uw/kFtZfIsC4/OKDVscWRBxY7xkb/4N5UJJ9OL2cpu1fZBHL9T6TG4lOyIEMj
[email protected]

3.1. デフォルトの場所の変更

キーペアを特定の場所に保存するには、_ssh-keygen_を実行し、プロンプトが表示されたら場所を入力します。
Enter file in which to save the key (/home/my-username/.ssh/id_rsa):
プロンプトには秘密鍵の名前のみが含まれますが、* _ ssh-keygen_は*同じディレクトリに_.pub_拡張子を持つ公開鍵ファイルを生成します*。
_-f_フラグを使用して、特定のファイル名で現在のディレクトリにキーペアを生成することもできます。
ssh-keygen -f example
上記のコマンドは、current_example_と_example.pub_のキーペアを現在のディレクトリに生成します。

3.2. パスフレーズを追加する

また、生成されたキーペアのロックを解除するためにパスフレーズを要求できます。 パスフレーズを追加するには、_ssh-keygen_を実行し、プロンプトが表示されたらパスフレーズを入力します。
Enter passphrase (empty for no passphrase):
_ssh-keygen_は、パスフレーズの確認を求めます。 パスフレーズが一致しない場合、_ssh-keygen_はパスフレーズの入力と再確認を求めます。

3.3. アルゴリズムと長さの選択

特に指定がない限り、_ssh-keygen_は、キーペアを生成するときにhttps://searchsecurity.techtarget.com/definition/RSA[Rivest–Shamir–Adleman(RSA)]アルゴリズムを使用します。 _-t_フラグを使用して別のアルゴリズムを指定できます。 例えば:
ssh-keygen -t dsa
デフォルトでは、これにより_id_dsa_と_id_dsa.pub_のキーペアが生成されます。 一般に、生成されたペアのデフォルトのファイル名の形式は、_id_ <algorithm> _および_id_ <algorithm> .pub_になります。
_–help_フラグを指定すると、サポートされているアルゴリズムのリストを表示できます。
ssh-keygen --help
これにより、次のような出力が生成されます。
usage: ssh-keygen ... [-t dsa | ecdsa | ed25519 | rsa]
    ...
必要に応じて、生成されたキーの長さは、_- b_フラグを使用してバイト単位で指定することもできます。
ssh-keygen -b 4096

4. 結論

このクイックチュートリアルでは、SSHの基本と、それを使用してユーザーを認証する方法を学びました。 この理解を使用して、_ssh-keygen_コマンドを使用して、さまざまなアルゴリズムとさまざまな長さのSSHキーペアを生成できます。
その後、これらのキーペアを使用して、SSHをサポートするアプリケーションで自動的に認証できます。