Ubuntu20.04でSSHキーを追加する方法

SSHキーを使用してリモートUbuntuサーバーへの安全なパスワードなしのログインを設定します

SSHは、クライアントコンピューターがリモートサーバーに接続して通信するのに役立つ安全なクライアントサーバーネットワークプロトコルです。 SSH接続により、端末に入力されたコマンドが暗号化されたチャネルを介してリモートサーバーに送信されます。

リモートサーバーへの接続に使用される認証メカニズムには、パスワードベースの認証(ブルートフォース攻撃を受けやすい)とSSHキーベースの認証(非常に安全)の2種類があります。

SSHキーベースの認証では、公開キーおよび秘密キーと呼ばれるキーペアがクライアントコンピューター上に生成されます。この公開鍵のコピーは、リモートサーバーで利用できるようになります。クライアントがサーバーに接続要求を送信すると、サーバーはランダムな文字列を生成し、公開鍵を使用して暗号化します。この文字列は、クライアントコンピューターで使用可能な秘密鍵を使用してのみ復号化できます。この方法により、秘密鍵を含むクライアントのみがサーバーにアクセスできるようになります。

このガイドでは、Ubuntu 20.04LTSサーバーでSSHキーを設定する方法を説明します。

コンピューターに既存のSSHキーがあるかどうかを確認します

SSHキーペアがコンピュータにすでに存在するかどうかを確認するには、ターミナルでこのコマンドを入力します。

ls -l〜 / .ssh / id _ *。pub

上記のコマンドが そのようなファイル、又はディレクトリはありません また 一致するものが見つかりません、それはSSHキーペアが存在しないことを意味します。

既存のSSHキーペアがある場合は、同じキーペアを使用して2つのリモートサーバーにアクセスするか、異なる名前の別のキーペアを作成することもできます。次のステップに進み、両方の場合のSSHキーを生成する方法を見てみましょう。

クライアントコンピューターでのSSHキーの作成

コンピューターで新しいSSHキーペアを生成するには、次のようにコマンドを入力します。

ssh-keygen

デフォルトでは、SSHキーは2048ビットです。セキュリティを強化するために、より高いビットでSSHキーを生成する場合は、次のコマンドを使用します。

ssh-keygen -b 4096

コマンドが正常に実行されると、次のメッセージが画面に表示されます。

パブリック/プライベートrsaキーペアを生成します。キーを保存するファイルを入力します(/home/harshit/.ssh/id_rsa):

コンピュータに既存のSSHキーペアがない場合は、を押すだけです。 入力、ただし、既存のSSHキーがある場合は、以下に示すように、別のファイル名でキーを保存します。

キーを保存するファイルを入力します(/home/your_name/.ssh/id_rsa):/home/your_name/.ssh/id_rsa_xxx

交換してください xxx 以下に示すように、ファイル名の最後に適切な名前を付けて、 入力.

キーを保存するファイルを入力します(/home/your_name/.ssh/id_rsa):/home/your_name/.ssh/id_rsa_client_1

次のプロンプトでは、任意の長さのパスフレーズを入力するように求められます。これにより、デバイスで2レベルのセキュリティが確保されます。

パスフレーズを入力してください(パスフレーズがない場合は空):同じパスフレーズをもう一度入力してください:

このパスフレーズを入力すると、その人があなたの秘密鍵にアクセスできたとしても、このパスフレーズがないとリモートサーバーにアクセスできなくなります。

プロセス全体が完了すると、次のメッセージが画面に表示されます。

ssh-keygen -b 4096プロセス全体のSSHキー生成が完了すると、次のメッセージが画面に表示されます。

SSHキーがシステムで生成されました。次に、リモートサーバーに公開鍵をコピーします。

公開鍵をリモートUbuntuサーバーにコピーする

公開鍵をリモートサーバーにコピーする最も簡単で迅速な方法は、 ssh-copy-id 効用。ただし、何らかの理由でこのユーティリティがマシンで使用できない場合は、このセクションで提供されている他の方法を使用することもできます。

ssh-copy-idユーティリティの使用

The ssh-copy-id ユーティリティはデフォルトでUbuntuマシンで利用可能であり、デバイスからリモートUbuntuマシンの適切なディレクトリに公開鍵をコピーします。

公開sshキーをコピーするには、以下に示すように、ターミナルでコマンドを入力するだけです。

ssh-copy-id username @ hostname

交換してください ユーザー名ホスト名 上記のコマンドで、サーバーのユーザー名とホスト名を使用します。

ホストに初めて接続する場合は、次のメッセージがターミナルに表示されます。次のように入力します。 はい を押して 入力.

ホスト「172.105.XX.XX(172.105.XX.XX)」の信頼性を確立できません。 ECDSAキーのフィンガープリントはxx:xx:xx:xx:77:fe:73:xx:xx:55:00:ad:d6:xx:xx:xxです。接続を続行してもよろしいですか(はい/いいえ)? はい

今、 ssh-copy-id ユーティリティは、名前のファイルをスキャンします id_rsa.pub これには公開SSHキーが含まれています。スキャンプロセスが完了すると、以下に示すように、リモートサーバーのパスワードを入力するように求められます。パスワードを入力して、 入力.

/ usr / bin / ssh-copy-id:INFO:新しいキーでログインしようとしています。すでにインストールされているものを除外します/ usr / bin / ssh-copy-id:INFO:1キー)まだインストールされていません-プロンプトが表示されたら、新しいキー[email protected]のパスワードをインストールします。

キーが追加されると、次のメッセージが出力として端末に表示されます。

追加されたキーの数:1ここで、「ssh'[email protected] '」を使用してマシンにログインし、必要なキーのみが追加されたことを確認します。

クライアントコンピューターに複数のSSHキーがある場合は、適切な公開キーをリモートコンピューターにコピーするには、以下に示すパターンでコマンドを入力します。

ssh-copy-id -i id_rsa_xxx.pub username @ host

💡ヒント

ターミナルに入力するときは、ファイル名の最後に.pubを付けることを忘れないでください。

配管方式による公開鍵のコピー

次のコマンドをターミナルに入力します。 ssh-copy-id ユーティリティは利用できません。このコマンドは少し長く見えるかもしれませんが、適切に機能します。

cat〜 / .ssh / id_rsa.pub | ssh remote_username @ server_ip_address "mkdir -p〜 / .ssh && touch〜 / .ssh / authorized_keys && chmod -R go =〜/ .ssh && cat >>〜/ .ssh / authorized_keys"

交換 remote_usernameサーバのIPアドレス ユーザー名とIPアドレスを使用します。

コンピューターで複数のSSHキーを使用できる場合は、 id_rsa.pub 選択した公開SSHキーファイルを使用します。例えば、 id_rsa_client_1.pub.

プロンプトが表示されたらリモートユーザーのパスワードを入力し、 入力.

[email protected]のパスワード:

パスワードを入力すると、 id_rsa.pub ファイルはにコピーされます authorized_keys リモートサーバーのファイル。

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

パスワード認証を介してリモートシステムにアクセスできない場合は、この方法を使用してください。

を開きます id_rsa.pub を使用してファイル ターミナルのコマンド。テキストエディタから開くこともできます。目的はファイルの内容をコピーすることだけです。

cat〜 / .ssh / id_rsa.pub

ファイルの内容は次のようになります。

SSH-RSA AAAAB3NzaC1yc2EAAAADAQABAAABAQComjFtuHvHQ67uf3RXg2wgK4EtxBvBvLCtlc4chG + nJ1cbuJjJ6G8az4xsRN1Q7hrV4dYR81Tk3gRApiMdGcMvInU3Vb7Wq3nh9GS4xnLRH1wvb149wogum2MycIES69Xh0cib + VvJyZ + dGO8zRNT64 + SvfiecRV0llnBGWDRqrIGtMHJkKz7VDKuSyzDit / Ck1NFXxC6Plw3cEMOhWHycm8bnSHSoVpr95ySxxnokX4 / 9iAlvOovxTpMpmDaDvuHKgHxcsOv9Q4sz // 6Hy / 65 + qqmiuLyuIQXjDiiYTjHTx + VNi6S0iMLoN6XgDLp0MfG6kLvZ0Z + csqdvIDQfMuH your_name @ your_PC

次に、リモートサーバーにログインし、以下に示すコマンドを使用して、コピーしたコンテンツを貼り付けます。交換してください above_string コピーされたコンテンツで。

echo above_string >>〜/ .ssh / authorized_keys

複数のSSHキーの設定(オプション)

この手順は、クライアントコンピューターに複数のSSHキーを設定しているユーザーを対象としています。 SSHキーの設定が1つしかない場合は、このセクションをスキップしてください。

複数のSSHキーを管理するために、ここで作成します 構成 内部のファイル .ssh 以下に示すコマンドを使用してディレクトリ。

cd〜 / .ssh vim config

タイプ 次の例に示すように、コマンドモードに入り、複数のホストの詳細を入力します。

ホストremote-ubuntu-serverHostName 172.105.XX.XXユーザールートIdentityFile〜 / .ssh / id_rsa_client_1ホストremote-ubuntu-serverホスト名172.106.XX.XXユーザーrootIdentityFile〜 / .ssh / id_rsa_client_2

同様に、他のリモートサーバーとそのキーの詳細を入力します。プロセスが完了したら、を押します ESC:wq 保存して終了します。

これで、後続のプロセスは、クライアントコンピューターに単一または複数のSSHキーがある場合でも同じになります。

SSHキーを使用してリモートサーバーにログインします

公開鍵のコピープロセスが完了したら、次のようにコマンドを入力してリモートサーバーにログインします。

ssh remote_username @ server_ip_address

キーペアの生成中にパスフレーズを指定した場合は、パスフレーズを入力するように求められます。認証プロセスが完了すると、新しいセッションが開きます。

これで、リモートサーバーでSSHキーベースの認証が正常に構成されました。ただし、パスワードベースの認証はサーバー上で引き続きアクティブです。これは、リモートサーバーがブルートフォース攻撃を受けやすいことを意味します。

そこで、リモートサーバーからパスワードベースのログインメカニズムを完全に無効にします。

パスワードベースのログインメカニズムを無効にする

変更を加える前に、リモートアカウントのrootユーザーまたはsudoが有効なユーザーが、SSHキーベースの認証システムを使用してサーバーにアクセスできることを確認してください。この手順では、パスワードベースのログインを完全にロックまたは無効にするため、少なくとも1人のユーザーroot権限がSSHキーを介してサーバーにアクセスできることが重要です。

リモートUbuntuサーバーにログインし、以下に示すコマンドを入力します。

sudo vim / etc / ssh / sshd_config
  • 押す ESC, / 「PasswordAuthentication」と入力して、 入力.
  • 今押します 「PasswordAuthenticationyes」の値を「PasswordAuthenticationno」に変更します。
  • 押す ESC 上記のプロセスを繰り返して「ChallengeResponseAuthentication」、「UsePAM」を見つけ、それらの値を次のように変更します。 いいえ 同様に。
PasswordAuthentication no ChallengeResponseAuthentication no UsePAM no

すべての値がに設定されたら いいえ、 押す ESC、 タイプ :wq とヒット 入力.

すべての変更を有効にするには、 ssh 以下のコマンドを使用してサービスを提供します。

sudo systemctl restart ssh

次に、コンピュータで新しいターミナルウィンドウを開き、現在のセッションを閉じる前にSSHキー認証が正しく機能していることを確認します。

検証プロセスが完了したら、実行中のすべてのセッションを閉じます。

これで、Ubuntu20.04サーバーでSSHキーベースの認証が正常に構成されました。これで、パスワードベースのログインメカニズムを使用してサーバーにログインすることはできなくなります。