序章

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

Note: As of July 1, 2022, DigitalOcean no longer supports the creation of new FreeBSD Droplets through the Control Panel or API. However, you can still spin up FreeBSD Droplets using a custom image. Learn how to import a custom image to DigitalOcean by following our product documentation.

SSHキーのしくみ

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

The issue with passwords is that they are typically created manually, without sufficient length or complexity in content. したがって、ブルートフォース攻撃によって危険にさらされる可能性があります。 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: 

このオプションのパスフレーズは、秘密鍵を暗号化するために使用されます。 ここでパスフレーズを設定すると、認証に秘密鍵を使用するたびに必要になります。つまり、認証には秘密鍵の両方のパスフレーズが必要になります。これにより、秘密鍵がどういうわけか妥協。 パスフレーズを空白のままにすると、パスワードなしで秘密鍵を使用してサーバーにログインできるようになります。つまり、認証は秘密鍵のみに基づいて行われるため、キーは安全です。

この後、次の出力が表示されます。これにより、秘密鍵と公開鍵が作成されている場所などがわかります。

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キー認証を使用してログインするサーバーに公開キーをインストールする必要があります。

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

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

最も単純なものから始めて、いくつかの異なる方法を説明します。 あなたがツールを持っていて、最も快適な方法を使うだけです。

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

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

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

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

ssh-copy-id username@remote_host

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

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)? yes

これは、ローカルコンピュータが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経由で削除サーバーにパイプすることで機能します。 リモートサーバーで、いくつかのコマンドを実行して、 ~/.ssh ディレクトリ(まだ存在しない場合)、公開鍵をというファイルに追加します。 authorized_keys ディレクトリに。 を使用します >> キーをに追加するようにリダイレクトします authorized_keys ファイル(すでに存在する場合)、公開SSHキーがリモートユーザーのアカウントにすでにインストールされている場合(したがって、許可されたキーとして上書きおよび削除されることはありません)。

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

cat ~/.ssh/id_rsa.pub | ssh username@remote_host "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)? yes

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

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

[email protected]'s password:

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

SSHキーを使用したサーバーへの認証セクションに進み、SSHキーを使用してサーバーにログインします。

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

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

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

まず、リモートサーバーにログインします。 You can do so using the following command to connect via SSH:

ssh username@remote_host

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

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)? yes

これは、ローカルコンピュータが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 username@remote_host

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

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

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

サーバーでのパスワード認証の無効化

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

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

上記の条件が満たされたら、rootとして、またはsudo権限を持つアカウントを使用して、SSHキーを使用してリモートサーバーにログインします。 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の操作について詳しく知りたい場合は、SSHエッセンシャルガイドをご覧ください。