FreeBSDサーバーでSSHキーベース認証を構成する方法

前書き

SSH(セキュアシェル)は、サーバーと通信して管理するための安全で暗号化された方法を提供するネットワークプロトコルです。 SSHはFreeBSDサーバーを操作する最も一般的な方法であるため、サーバーを認証してログインするさまざまな方法に慣れる必要があります。 FreeBSDサーバーにログインする方法はいくつかありますが、このチュートリアルでは認証用のSSHキーの設定と使用に焦点を当てます。

SSHキーの仕組み

SSHサーバーは、さまざまな方法を使用してクライアントを認証できます。 最も一般的な方法には、パスワードおよびSSHキー認証が含まれます。 パスワードは不正アクセスに対する障壁を提供しますが、SSHキーを使用する方が一般的に安全です。

パスワードの問題は、通常、コンテンツ内で十分な長さや複雑さを持たずに手動で作成されることです。 したがって、ブルートフォース攻撃によって侵害される可能性があります。 SSHキーは、確実に安全な代替手段を提供します。

パスワードの代わりにSSHキーペアを認証に使用できます。各キーペアは、プライベートキーと対応するパブリックキーで構成されます。

*秘密キー*はパスワードと同様に機能し、クライアントコンピューターに保持されます。 その内容は秘密にしておく必要があります。許可されていない人があなたの秘密鍵にアクセスした場合、それは危険にさらされていると見なされ、速やかに交換される必要があります。 秘密鍵は通常、少なくとも2048ビット長であり、オプションでパスフレーズ(基本的には秘密鍵を使用するために必要なパスワード)で暗号化して、権限のない人が鍵にアクセスする場合に使用を制限できます。

関連付けられた*公開キー*は、悪影響を与えることなく自由に共有できます。 これは、秘密鍵のみが復号化できるメッセージを暗号化するために使用できます。これは、SSH鍵認証の仕組みの基礎です。

認証に秘密鍵を使用できるようにするには、対応する公開鍵がリモートサーバー上のユーザーのアカウントにインストールされます。 公開キーは、リモートユーザーのホームディレクトリ内の「+ .ssh / authorized_keys +」という特別なファイルに追加する必要があります。 クライアントがリモートサーバーに接続しようとすると、サーバーは、クライアントが承認されたキーの1つに対応する秘密キーを持っているかどうかを確認できます。秘密キーが承認された公開キーと一致する場合、シェルセッションが開始されます。

SSHキーペアを作成する方法

SSHキー認証を設定する最初の手順は、ログインするコンピューターであるローカルコンピューターでSSHキーペアを生成することです。

SSHキーペアを生成するには、 `+ ssh-keygen +`ユーティリティを使用できます。 デフォルトでは、ほとんどの場合に適切な2048ビットRSAキーペアを作成します。

ローカルコンピューターの端末で、次のコマンドを使用してキーペアを生成します。

ssh-keygen

次のような出力が表示されます。

Generating public/private rsa key pair.
Enter file in which to save the key (/home/username/.ssh/id_rsa):

プロンプトで、デフォルトのキーの場所を受け入れるか、別のパスを入力できます。 デフォルトを受け入れると、キーはユーザーのホームディレクトリ内の `+ .ssh `ディレクトリに保存されます。 秘密鍵は「 id_rsa」と呼ばれ、公開鍵は「+ id_rsa.pub」と呼ばれます。

SSHキーを使い始めたばかりの場合は、デフォルトの場所を使用することをお勧めします。 そうすることで、認証を試みるときにSSHクライアントがSSHキーを自動的に見つけることができます。 非標準のパスを選択する場合は、ここに入力します。そうでない場合は、プロンプトを空白のままにし、 `+ RETURN +`を押してデフォルトを受け入れます。

以前にSSHキーペアを生成した場合、次のようなプロンプトが表示される場合があります。

/home/username/.ssh/id_rsa already exists.
Overwrite (y/n)?

既存のキーを上書きすることを選択した場合、そのキーは削除され、認証に使用できなくなります。 つまり、どのサーバーに対しても認証する必要がないことが確実でない限り、上書きしないでください。

この時点で、パスフレーズのプロンプトが表示されるはずです。

Created directory '/home/username/.ssh'.
Enter passphrase (empty for no passphrase):
Enter same passphrase again:

このオプションのパスフレーズは、秘密鍵の暗号化に使用されます。 ここでパスフレーズを設定した場合、認証に秘密鍵を使用するたびに必要になります。つまり、認証には秘密鍵とそのパスフレーズの両方が必要になります。 パスフレーズを空白のままにすると、_password_なしでプライベートキーを使用してサーバーにログインできるようになります。つまり、認証はプライベートキーのみに基づいて行われるため、必ずキーを安全に保管してください。

この後、次の出力が表示されます。これにより、秘密鍵と公開鍵がどこで作成されているか、その他の詳細が示されます。

Your identification has been saved in /home/sammy/.ssh/id_rsa.
Your public key has been saved in /home/sammy/.ssh/id_rsa.pub.
The key fingerprint is:
76:e2:bc:19:18:b3:35:59:f4:54:b9:d3:bc:d0:56:a1 username@localcomputer
The key's randomart image is:
+--[ RSA 2048]----+
|          . ...o.|
|         . o  o .|
|          . .E.+.|
|         o   .ooo|
|      o S .   o..|
|       X +     . |
|      o +        |
|         +       |
|        o        |
+-----------------+

SSHキーの公開と秘密のペアができたので、SSHキー認証を使用してログインするサーバーに公開キーをインストールします。

サーバーを作成するときに公開キーを埋め込む方法

DigitalOceanコントロールパネルでは、ドロップレット作成プロセス中に、作成中のドロップレットに1つ以上の公開SSHキーを追加するオプションがあります。 FreeBSDドロップレットの場合、この公開SSHキーはスーパーユーザー権限を持つ `+ freebsd +`ユーザーにインストールされます。

デフォルトの場所にSSHキーペアを作成したと仮定すると、公開キーは `+〜/ .ssh / id_rsa.pub +`にあります。 公開鍵は、新しいドロップレットに追加するものです。

ローカルコンピューターで、ターミナルに次のコマンドを入力して、公開SSHキーを印刷します。

cat ~/.ssh/id_rsa.pub

ここで、DigitalOceanコントロールパネルから液滴作成プロセスを開始します。 ドロップレットに名前を付け、「ドロップレットの作成」ボタンの直前の「SSHキーの追加(オプション)」セクションが表示されるまで、必要な選択を行います。

image:https://assets.digitalocean.com/site/ControlPanel/cp_create_add_ssh_key.png [SSHキーの追加]

  • + Add SSH Key *リンクをクリックします。 これにより、SSH公開キーを追加できるフォームが開きます。

[* SSH Key content *]フィールドに、公開SSHキーのコンテンツを貼り付けます(ターミナルからコピーして、貼り付けます)。 * Comment(optional)*フィールドを使用して、SSHキーにラベルを付けることもできます。 これは次のようになります。

image:https://assets.digitalocean.com/site/ControlPanel/cp_create_add_ssh_key_content.png [SSHキーコンテンツの追加]

次に、緑色の[SSHキーを追加]ボタンをクリックして、SSH公開キーをDigitalOceanアカウントに追加します。 新しく追加されたSSHは自動的に選択され(青色で強調表示)、新しいドロップレットに追加されることを示します。 これは次のようになります。

image:https://assets.digitalocean.com/site/ControlPanel/cp_create_key.png [SSHキーの選択]

  • Create Droplet *ボタンをクリックして、液滴作成プロセスを終了します。

選択したSSHキーは、「+ freebsd 」ユーザーのアカウントに自動的に追加されます。 サーバーが起動すると、対応する秘密鍵を使用して、 ` freebsd +`ユーザーとしてサーバーに認証できます。

SSHキーはDigitalOceanアカウントに追加され、今後、ドロップレット作成プロセスで選択するだけで、今後作成するドロップレットに追加できることに注意してください。

公開キーをサーバーにコピーする方法

すでにFreeBSDサーバーがあり、作成中にSSHキーを追加しなかった場合(前のセクションで説明)、公開キーを追加し、秘密キーを使用してサーバーへの認証を行う他の方法がいくつかあります。 各メソッドは、同じ結果、つまりSSHキーペアを使用してサーバー上の特定のユーザーに対して認証する機能を備えています。 これらの方法のいずれかを繰り返して、複数のSSHキーをインストールできることに注意してください(対応する秘密キーの所有者へのアクセスを許可します)。

最も簡単なものから始めて、いくつかの異なる方法を説明します。 ツールを使用していて、最も使いやすい方法を使用してください。

SSH-Copy-IDを使用した公開キーのコピー

ローカルコンピューターに `+ ssh-copy-id `ユーティリティがある場合、それを使用して、パスワードベースのSSHアクセスがあるリモートサーバーに公開SSHキーを簡単に追加できます。 ` ssh-copy-id `ユーティリティは、常にではありませんが、多くの場合OpenSSHパッケージ( ` ssh `と ` ssh-keygen +`を提供するものと同じ)に含まれています。

ローカルコンピューターにツールがあるかどうかを確認するには、コマンドラインから `+ ssh-copy-id +`を実行するだけです。 利用できない場合は、「コマンドが見つかりません」というエラーが表示されます。 ユーティリティを使用できない場合は、インストールしてインストールするか、次のサブセクションで説明する他の方法のいずれかを使用してください。

`+ ssh-copy-id +`を使用するには、リモートホストのIPアドレスまたはドメイン名、および公開SSHキーを追加するユーザーを指定する必要があります。 次のように実行できます(強調表示された部分を適切な情報に置き換えます)。

ssh-copy-id @

次のようなメッセージが表示される場合があります。

The authenticity of host '111.222.11.222 (111.222.11.222)' can't be established.
ECDSA key fingerprint is fd:fd:d4:f9:77:fe:73:84:e1:55:00:ab:e6:6d:12:fe.
Are you sure you want to continue connecting (yes/no)?

これは、SSHを使用して接続しようとしたことがないため、ローカルコンピューターがリモートサーバーを認識しないことを意味します。 プロンプトに「+ yes」または「」で応答し、「 RETURN」を押して続行します。

このユーティリティは、以前に作成した公開キー `+ id_rsa.pub +`のローカルユーザーアカウントをスキャンします。 見つかった場合、リモートサーバー上のユーザーのパスワードの入力を求められます。

/usr/bin/ssh-copy-id: INFO: attempting to log in with the new key(s), to filter out any that are already installed
/usr/bin/ssh-copy-id: INFO: 1 key(s) remain to be installed -- if you are prompted now it is to install the new keys
[email protected]'s password:

パスワードを入力し、「+ RETURN」を押します。 このユーティリティは、リモートホスト上のユーザーアカウントに接続し、公開キー `+ id_rsa.pub `をインストールします。 キーは、公開キーの内容をリモートユーザーのホームディレクトリにある「 .ssh / authorized_keys +」というファイルにコピーすることでインストールされます。

コピーが成功すると、次のような出力が表示されます。

Number of key(s) added: 1

Now try logging into the machine, with:   "ssh '[email protected]'"
and check to make sure that only the key(s) you wanted were added.

公開キーはリモートユーザーの + authorized_keys +`ファイルにインストールされるため、対応するプライベートキー(ローカルコンピューターの `+ id_rsa +)は、リモートサーバー上のユーザーに対する認証として受け入れられます。

SSHキーを使用してサーバーにログインするには、_SSHキーを使用してサーバーに認証_セクションに進みます。

SSHを使用して公開キーをコピーする

ローカルコンピューターに `+ ssh-copy-id +`がないが、サーバーにパスワードベースのSSHアクセスがある場合は、SSHクライアントを使用して公開キーをインストールできます。

この方法は、ローカルコンピューターで公開SSHキーを出力し、SSHを介して削除サーバーに_piping_することで機能します。 リモートサーバー上で、いくつかのコマンドを実行して `〜/ .ssh +`ディレクトリを作成します(まだ存在しない場合)。次に、公開キーをディレクトリ内の ` authorized_keys +`というファイルに追加します。 公開鍵SSHキーがリモートユーザーのアカウントに既にインストールされている場合(上書きされないため)認証済みキーとして削除されます)。

公開キーのデフォルト名が `+ id_rsa.pub +`であると仮定すると、公開SSHキーをインストールするコマンドは次のとおりです(リモートユーザーとホストを置き換えます)。

cat ~/.ssh/id_rsa.pub | ssh @ "mkdir -p ~/.ssh && cat >> ~/.ssh/authorized_keys"

次のようなメッセージが表示される場合があります。

The authenticity of host '111.222.11.222 (111.222.11.222)' can't be established.
ECDSA key fingerprint is fd:fd:d4:f9:77:fe:73:84:e1:55:00:ab:e6:6d:12:fe.
Are you sure you want to continue connecting (yes/no)?

これは、SSHを使用して接続しようとしたことがないため、ローカルコンピューターがリモートサーバーを認識しないことを意味します。 プロンプトに「+ yes」または「」で応答し、「 RETURN」を押して続行します。

これで、リモートユーザーのパスワードの入力を求められます。

[email protected]'s password:

パスワードを入力し、「+ RETURN」を押します。 コマンドが正常に実行された場合、フィードバックは表示されません。 公開キーである `+ id_rsa.pub `の内容は、リモートユーザーの ` authorized_keys +`ファイルの末尾に追加されます。

SSHキーを使用してサーバーにログインするには、_SSHキーを使用してサーバーに認証_セクションに進みます。

公開鍵を手動でコピーする

公開キーを手動でインストールする場合は、SSHまたはコンソールアクセスを使用してインストールできます。 公開鍵をインストールするユーザーとしてリモートサーバーにログインする必要があります。

基本的なプロセスは、公開SSHキーと `+ id_rsa.pub `のコンテンツを取得し、リモートホスト上のユーザーのホームディレクトリにある ` .ssh / authorized_keys +`ファイルに追加することです。

最初に、リモートサーバーにログインします。 DigitalOceanコントロールパネルでコンソールを使用していない場合は、次のコマンドを使用してSSH経由で接続します。

ssh @

次のようなメッセージが表示される場合があります。

The authenticity of host '111.222.11.222 (111.222.11.222)' can't be established.
ECDSA key fingerprint is fd:fd:d4:f9:77:fe:73:84:e1:55:00:ab:e6:6d:12:fe.
Are you sure you want to continue connecting (yes/no)?

これは、SSHを使用して接続しようとしたことがないため、ローカルコンピューターがリモートサーバーを認識しないことを意味します。 プロンプトに「+ yes」または「」で応答し、「 RETURN」を押して続行します。

これで、リモートユーザーのパスワードの入力を求められます。

Password for [email protected]:

次に、リモートユーザーのホームディレクトリに「+ .ssh +」ディレクトリがまだない場合は作成します。 このコマンドはまさにそれを行います:

mkdir -p ~/.ssh

*ローカルコンピューター*で、ターミナルに次のコマンドを入力して公開SSHキーを印刷します。

cat ~/.ssh/id_rsa.pub

出力をクリップボードにコピーし、選択したテキストエディターで `+ authorized_keys `ファイルを開きます。 ここでは ` ee +`を使用します。

ee ~/.ssh/authorized_keys

公開キーを `+ authorized_keys `ファイルに貼り付け、保存して終了します。 ` ee `を使用している場合は、 ` ESC `に続いて ` a `を押し、次に ` a +`を押して保存して終了します。

これで、公開SSHキーがリモートサーバーにインストールされました。 次のセクションに進み、SSHキーを使用してサーバーにログインします。

SSHキーを使用してサーバーを認証する

上記の方法のいずれかを使用してFreeBSDサーバーに公開SSHキーを正常にインストールした場合、キー認証を使用してサーバーにログインできるはずです。 つまり、ログインするためにリモートユーザーのパスワードは必要なくなります。

SSHを使用してリモートサーバーにログインしようとします。

ssh @

パスフレーズを使用してSSHキーペアを作成しなかった場合は、すぐにログインします。 パスフレーズを使用してキーペアを作成した場合は、入力を求められます。

サーバーにログインしている場合は、SSHキーが正常にインストールされたことを意味します。

パスワードとキーベースの認証の両方がこのユーザーに対して有効になっていることに注意してください。 サーバーのパスワード認証を無効にして、ログインにSSHキーを要求することでより安全にしたい場合は、次のセクションをお読みください。

サーバーでパスワード認証を無効にする

パスワードなしでSSHを使用してアカウントにログインできた場合、アカウントへのSSHキーベースの認証は正常に設定されています。 ただし、パスワードベースの認証メカニズムはまだアクティブであるため、サーバーはブルートフォース攻撃にさらされています。

このセクションの手順を完了する前に、このサーバーのルートアカウントにSSHキーベースの認証が構成されていること、またはできれば、sudoアクセスを持つこのサーバーのアカウントにSSHキーベースの認証が構成されていることを確認してください。 この手順により、パスワードベースのログインがロックダウンされるため、管理アクセスを取得できるようにすることが不可欠です。

上記の条件が満たされたら、SSHキーを使用して、rootまたはsudo特権を持つアカウントでリモートサーバーにログインします。 SSHデーモンの構成ファイルを開きます。

sudo ee /etc/ssh/sshd_config

ファイルで、 `+ ChallengeResponseAuthentication `というディレクティブを見つけます。 コメントアウトされる場合があります。 `#+`文字を削除して行のコメントを解除し、値を「no」に設定します。 完了すると、次のようになります。

ChallengeResponseAuthentication no

ファイルを保存して閉じます。 `+ ee `を使用している場合は、 ` ESC `に続いて ` a `を押し、次に ` a +`を押して保存して終了します。

変更を有効にするには、 `+ sshd`サービスを再起動する必要があります。 FreeBSDでSSHデーモンを再起動するには、次のコマンドを使用します。

sudo service sshd restart

パスワード認証が無効になっているため、サーバーへのSSHアクセスではSSHキー認証を使用する必要があります。

結論

これで、FreeBSDサーバーでSSHキーベースの認証を実行できるようになり、ユーザーパスワードを入力せずにログインできるようになります。 ここから、FreeBSDサーバーのセキュリティ保護についてさらに読むことができます。 SSHの操作について詳しく知りたい場合は、https://www.digitalocean.com/community/tutorials/ssh-essentials-working-with-ssh-servers-clients-and-keysをご覧ください[ SSHの基本ガイド]。