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キーの生成

当然のことながら、GitHubGitLabなど、最も人気のあるWebサイトの多くはSSH認証を使用しています。

これらのWebサイトでこのメカニズムを使用するには、SSHキーペアを作成する必要があります。 現在のユーザーのキーペアを生成するには、次のコマンドを実行します。

ssh-keygen

キーペア、パスフレーズ、およびパスフレーズ確認を保存する場所を入力するように求められます。 各プロンプトでEnterキーを押して、3つすべてのデフォルトを選択します。

デフォルトでは、 ssh-keygenはキーペアを〜/.sshに保存します。 そのディレクトリには、それぞれ秘密鍵と公開鍵に対応するid_rsaid_rsa.pubの2つのファイルがあります。

秘密鍵(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
my-username@my-computer-name

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

上記のコマンドは、現在のディレクトリにexampleexample.pubのキーペアを生成します。

3.2. パスフレーズの追加

また、生成されたキーペアのロックを解除するためにパスフレーズを要求することもできます。 パスフレーズを追加するには、 ssh-keygen を実行し、プロンプトが表示されたらパスフレーズを入力します。

Enter passphrase (empty for no passphrase):

ssh-keygen は、パスフレーズの確認を求めるプロンプトを表示します。 パスフレーズが一致しない場合、 ssh-keygen により、パスフレーズを入力して再確認するように求められます。

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

特に指定がない限り、 ssh-keygen は、キーペアを生成するときに Riverst–Shamir–Adleman(RSA)アルゴリズムを使用します。 -tフラグを使用して別のアルゴリズムを指定できます。 例えば:

ssh-keygen -t dsa

デフォルトでは、これによりid_dsaid_dsa.pubのキーペアが生成されます。 一般に、生成されたペアのデフォルトのファイル名は次の形式になります id_ id_ 。パブ

–help フラグを指定すると、サポートされているアルゴリズムのリストを表示できます。

ssh-keygen --help

これにより、次のような出力になります。

usage: ssh-keygen ... [-t dsa | ecdsa | ed25519 | rsa]
    ...

必要に応じて、生成されたキーの長さを-bフラグを使用してバイト単位で指定することもできます。

ssh-keygen -b 4096

4. 結論

このクイックチュートリアルでは、SSHの基本と、SSHを使用してユーザーを認証する方法を学びました。 この理解を利用して、 ssh-keygen コマンドを使用して、さまざまなアルゴリズムとさまざまな長さのSSHキーペアを生成できます。

次に、これらのキーペアを使用して、SSHをサポートするアプリケーションで自動的に認証できます。