ブログに戻る

SSH鍵ベースの認証を使用するためのLinuxサーバーの設定

SSH鍵ベースの認証を使用するためのLinuxサーバーの設定

LinuxサーバーでのSSH

SSHは、セキュアシェルとも呼ばれ、サーバーとの接続や通信に使用できるプロトコルです。この暗号化プロトコルを使用して、ターミナルセッションのためにLinuxサーバーに接続することができます。OpenSSHサーバーを使用している場合、認証プロセスには主に2つの異なる方法があります。1つ目は、標準的なパスワードベースの認証です。ここでは、ユーザー名とパスワードの資格情報を使用してアカウントにアクセスします。もう1つの方法は、LinuxサーバーをSSH鍵ベース of 認証用に設定することです。

このガイドでは、Linuxサーバーを設定して、主要な認証手段としてSSH鍵を使用する方法に焦点を当てます。また、通常のパスワード保護メカニズムよりもSSH鍵が好まれる理由についても説明します。

SSH鍵とは?

SSH鍵は、サーバー上のアカウントにログインするために使用する資格情報に似ています。ユーザー名とパスワードを入力する代わりに、アクセス資格情報でもあるSSH鍵ペアを使用します。鍵は暗号化されていますが、その目的に応じて認証資格情報として扱う必要があります。

一般的なSSH鍵には、認証済み鍵(authorized key)と識別鍵(identity key)の2つの部分があります。認証済み鍵は公開鍵であり、秘密の識別鍵と組み合わせて動作することで、アカウントへのアクセスを許可します。公開鍵は、SSHでログインしたいリモートサーバー上に配置され、ユーザーアカウントに関連付けられた ~/.ssh/authorized_keys ファイルに保存されます。識別鍵は、あなたが正しいユーザーであることを確認し、許可された人員のみが特定のアカウントにアクセスできるようにする役割を果たします。これらの鍵は、ユーザーの身元を認証するため、総称してユーザー鍵と呼ばれます。サーバーが両方の鍵を検証できると、コマンドを実行するためのシェルセッションが開始されます。

また、ホスト鍵とセッション鍵もあります。このプロトコルは、ホスト鍵を使用してローカルコンピューター、システム、またはサーバーを認証します。セッション鍵は、接続を介したデータストリームの暗号化に役立ちます。これにより、セッションとそれに対応するアクティビティの安全性が大幅に向上します。

パスワード保護に対するSSH鍵の優位性

パスワード保護よりもSSH鍵ベースの認証が好まれる主な理由は、パスワード保護ではサイバー攻撃に対して脆弱になる可能性があるためです。ほとんどの人は、ログイン時に覚えられるように、極端に複雑なパスワードを使用しません。その結果、脆弱な部分が生じます。多くの攻撃者は、比較的単純なパスワードを力ずくで破り、アカウントに侵入しようとします。自動化や高度なハッキング技術の登場により、最近ではこれが特に容易になっています。

一方、SSH鍵は、アカウントにアクセスするためのより安全な方法を提供します。前述のように、この方法では公開鍵と秘密鍵を使用してクライアントの身元を認証します。公開鍵は誰とでも共有できますが、秘密鍵は秘密にしておく必要があります。ペアになると、公開鍵が秘密鍵を復号して身元を認証します。さらに、鍵ペアの上にパスフレーズを追加することで、保護を重ねることができます。パスフレーズについては、このガイドの後半で詳しく説明します。ただし、パスフレーズがなくても、秘密SSH鍵はローカルコンピューター上で非常に安全に保管されます。ネットワークが鍵に直接アクセスすることは決してありません。鍵は制限されたディレクトリに配置され、制限されたアクセス権限が付与されているためです。

SSH鍵の生成

SSH鍵ペアを生成するには、OpenSSHツールスイートから ssh-keygen を見つける必要があります。これは、約2048ビットのサイズのSSH鍵ペアを生成できる特別なユーティリティツールです。まず、次のコマンドを実行します。

これにより、次のメッセージが表示されます。

このメッセージにより、id_rsaという名前の秘密鍵とid_rsa.pubという名前の公開鍵が生成されます。この時点で、鍵を保存する場所を選択できます。Enterキーを押してデフォルトの場所のままにすることをお勧めします。デフォルトの場所を使用すると、そのシステムを使用してログインするたびに、サーバーが自動的に鍵を検出して検証するようになります。デフォルトの場所は、ホームディレクトリ内の~/.sshディレクトリです。別の場所を選択したい場合は、その場所を入力してください。

古いSSH鍵の書き換え

システム上に一度に存在できるSSH鍵ペアは1つだけであることに注意してください。つまり、以前にシステム上で鍵ペアを生成して保存している場合は、次のメッセージが表示されます。

新しいSSH鍵ペアの作成と保存を続行するには、既存の鍵ペアを削除する必要があります。注意:ディスクにすでに保存されている鍵を上書きすると、認証目的でその鍵を使用することはできなくなります。これは元に戻せないプロセスであるため、古い鍵ペアを上書きしても問題ないことを完全に確認してください。

パスフレーズの設定

ディレクトリに鍵をセットアップすると、パスフレーズを入力するかどうか尋ねられます。

パスフレーズは任意であり、スキップすることもできます。ただし、ディスク上で秘密鍵を暗号化することにより、セキュリティレイヤーが追加されます。パスフレーズを使用することを選択した場合、このSSH鍵ペアを使用してログインを試みるたびに、パスフレーズを正しく入力する必要があります。

最後に、クライアントの認証に使用できるSSH鍵が手元にあるはずです。

サーバーアカウントへのSSH鍵の埋め込み

認証に鍵を使用する前に、リモートのLinuxサーバーに公開鍵を埋め込む必要があります。次に、CloudSigmaサーバーを作成する際にこれを行う方法を説明します。まず、コピー&ペーストできるように公開SSH鍵を見つける必要があります。上記の方法でSSH鍵ペアを生成した場合は、以下を入力することで公開鍵を見つけることができます。

これにより、以下のように公開SSH鍵が表示されます。

この値をコピーして後で使用します。CloudSigmaでサーバーを作成する場合、サーバーのサイズとOSイメージを選択した後にSSHキーを追加するオプションがあります。

single server creation

「追加」をクリックし、コピーした内容を貼り付けてSSHキーをサーバーに埋め込みます。その結果、サーバーを起動するたびに、注入されたSSHキーがすでに設定された状態になります。

既存のサーバーへの公開鍵のコピー

上記の方法は新しいサーバーを作成する場合に有効ですが、既存のサーバーにSSHキーを埋め込むことは可能でしょうか?答えは「はい」です。お使いのツールに応じて、いくつかの方法があります。

SSH-Copy-IDの使用

これは公開鍵をコピーする最もシンプルで簡単な方法です。必要なのは、標準のOpenSSHスイートに含まれているssh-copy-idユーティリティツールだけです。ただし、この方法を使用する前に、サーバーでパスワード認証が有効になっていることを確認してください。キーをコピーするには、ssh-copy-idの構文を適用し、接続先のリモートホストを入力します。また、接続先のアカウントを指定する必要もあります。キーが正しい場所にコピーされるように、アカウントへのパスワードベースのアクセス権が必要です。コマンドは次のようになります。

これにより、画面に以下のようなメッセージが表示される場合があります。

これは通常、その特定のリモートホストに初めて接続する場合に発生します。これは単に、コンピューターがホストを認識できなかったことを意味します。「yes」と入力してEnterキーを押すだけです。そうすると、ツールはアカウントをスキャンして公開鍵を探します。公開鍵が見つかると、アカウントのパスワードを入力するよう求められます。

次に、パスワードを入力します。アカウントに接続されると、ツールは ~/.ssh/id_rsa.pub キーの内容をコピーし、リモートアカウントの ~/.ssh ディレクトリにある authorized_keys に貼り付けます。その後、次のメッセージが表示されます。

これは、既存のリモートサーバーへの公開鍵のコピーが正常に完了したことを意味します。

SSHの使用

これは、サーバーに公開鍵をコピーするためのかなり従来の方法です。ssh-copy-idツールにアクセスできない場合は、この方法を使用することをお勧めします。この場合も、アカウントへのパスワードベースのアクセス権が必要です。本質的に行っているのは、公開鍵の内容をコンピューターの出力として取得し、それらの間に確立されたSSH接続を介してリモートサーバーに転送することです。この目的で使用するコマンドは次のようになります。

ご覧のように、サーバー上の ~/.ssh ディレクトリ内にある authorized_keys ファイルにキーを配置するように指定しました。また、>> 記号を使用することで、キーを上書きするのではなく追加することができます。コマンドを実行すると、次のメッセージが表示される場合があります。

前のメッセージと同様に、これはコンピュータがリモートホストを認識しなかったことを意味します。「yes」と入力してEnterキーを押し、次に進みます。ここで、アカウントのパスワードを入力します:

パスワードが確認されると、指定された通りにキーがユーザーアカウントのファイルにコピーされます。

手動

リモートサーバー上のアカウントにパスワードベースでアクセスできない場合は、公開鍵を手動でコピーできます。目的は、id_rsa.pub ファイルの値をリモートデバイスの ~/.ssh/authorized_keys ファイルに保存することです。すでにご存知のように、次のコマンドを使用して id_rsa.pub 鍵の値を表示できます:

SSH公開鍵の内容は次のように表示されます:

次に、利用可能なあらゆる手段を使って、リモートホスト上のアカウントにアクセスする必要があります。ログインしたら、~/.ssh ディレクトリが存在することを確認してください。存在しない場合は、次のコマンドを実行して作成できます:

これで、次のコマンドを使用して、リモートサーバー上のこの ~/.ssh ディレクトリにある authorized_keys ファイルに id_rsa.pub ファイルの内容を追加できます:

このコマンドで「public_key_string」と入力する代わりに、以前に cat ~/.ssh/id_rsa.pub コマンドを実行して抽出したキーの内容を入力する必要があります。

SSH鍵による認証

これで、SSH鍵のみを使用して簡単にアカウントにログインできるようになります。つまり、サーバーアカウントにアクセスするためにパスワードは不要になります。通常ログインに使用する認証情報を使用します:

これにより、次のメッセージが表示される場合があります:

このメッセージが表示されても心配しないでください。これは単に、ローカルシステムがリモートホストを認識できないことを意味しています。これは通常、ホストに初めて接続する場合に発生します。必要な操作は、「yes」と入力してEnterキーを押すことだけです。前の手順に戻りますが、パスフレーズを設定した場合は、ここで入力する必要があります。設定していない場合は、SSHキーが認証された後、すぐにアカウントにログインします。これにより、ローカルコンピュータ上の現在のアカウントを介して、新しいシェルセッションが開かれます。

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

SSHキーの設定方法がわかったところで、次はパスワード認証を無効にする必要があります。認証にSSHキーを使用できる場合でも、パスワード認証プロセスが有効なままであると、依然としてブルートフォース攻撃に対して脆弱です。パスワード認証メカニズムを無効にする前に、SSHキーベースの認証設定がサーバー上のrootアカウントのものであるか、または設定されたアカウントがsudoアクセス権を持っていることを確認してください。これを確認する理由は、パスワードが無効になっている場合でも、アカウントへの管理者アクセス権を維持できるようにするためです。これで、このSSHキーを使用してサーバーアカウントにログインできます。次のステップは、SSHデーモンの設定ファイルを開くことです。

ここで、次のディレクティブを検索する必要があります。

この行のコメントアウトを解除し、次のように値を「no」に変更する必要があります。

これにより、パスワードベースの認証が無効になります。完了したら、ファイルを保存して閉じるだけです。最後に、変更を適用するためにデバイスを再起動する必要があります。UbuntuまたはDebianデバイスのユーザーである場合は、次のコマンドを使用してパスワードベースの入力を無効にすることもできます。

CentOSまたはFedoraマシンで、デーモン(sshd)がサーバー上でSSHベースの認証のみを許可するようにするには、次のコマンドを使用します。

結論

これらの手順をすべて完了すると、サーバー上でSSHキーベース of 認証が設定され、実行されているはずです。これで、サーバーが安全に保護されていると安心できます!

快適なコンピューティングを!

author

Akshay Nagpal

著者 · CloudSigma

Preslav DobrevはCloudSigmaのクリエイティブデザイナーであり、従来型および革新的なマーケティングチャネルを活用した一貫性のあるビジネスアイデンティティに注力しています。彼は芸術的なビジョンと戦略的マーケティングを融合させ、インパクトのあるブランドナラティブを生み出すことに長けています。

コメント

コメントはまだありません。最初のコメントを投稿しましょう。