ウェブサイト検索

Ubuntu 24.04 でリモート SSH ログイン用の認証キーを設定する


これは、パスワード認証を無効にし、代わりに SSH キーを使用してリモートの Ubuntu サーバーまたはデスクトップにリモート ログインする方法を示す簡単なチュートリアルです。

SSH (Secure Shell) は、リモート サーバーにログインしたり、ローカル マシンとリモート マシン間でデータを転送したりするための、一般的で安全な方法です。リモート サーバーに SSH 接続しようとすると、通常、認証のためにユーザー パスワードが要求されます。

ただし、パスワードは最も安全というわけではありません。通常、これらは攻撃から保護するのに十分なほど複雑ではないか、長くないか、覚えにくく、接続するたびに何度も何度も入力する必要があります。

安全性を高め、時間を節約するには、セキュア キー認証を選択することをお勧めします。ここでは、段階的に設定する方法を説明します。

ステップ 1: 安全なキーペアを生成する

SSH キーのペアには通常、秘密 キーと 公開 キーが含まれます。ローカル クライアントは秘密キーを保持し、関連する公開キーはリモート サーバーにアップロードされます。

SSH 接続が開始されると、サーバーはクライアントが秘密キーを持っているかどうかをテストします。 「はい」の場合、接続を許可します。そうでない場合は、他の認証方法 (パスワードを要求するなど) があれば、それにフォールバックします。

キー ペアを生成するには、ターミナル (Ctrl+Alt+T) を開き、ローカル コンピュータで以下のコマンドを実行します。

ssh-keygen

SSH クライアント パッケージがインストールされていない場合は、sudo apt install openssh-client を実行します。

このコマンドはデフォルトで ed25519 キー ペアを作成します。次に、Enter キーを押してデフォルトのキー ファイルに保存するか、手動で /home/USER_NAME/.ssh/key_name_here と入力するかを尋ねられます。

次に、パスフレーズを入力し (アスタリスクのフィードバックは入力しないでください)、キーの暗号化を確認する必要があります。これにより、キーを紛失した場合でも、パスフレーズがなければ他の人は使用できなくなります。

ステップ 2: 公開キーをリモート サーバーにコピーする

手順 1 を完了すると、ローカルの .ssh フォルダーに秘密キー ファイルと公開キー ファイルが存在するはずです。

コマンドを実行してそのフォルダーに移動し、フォルダーの内容を一覧表示します。次に、2 つのキー ファイルが表示されます。

cd ~/.ssh && ls

注: 以下のコマンドを実行する前に、リモート サーバーに openssh-server がインストールされていて、ssh.service (24.04 の場合は ssh.socket) が有効になっていることを確認してください。また、 パスワード認証を許可する必要もあります。

パブリックを SSH サーバーにアップロードするには、ローカル コンピュータで以下の同様のコマンドを実行します。

ssh-copy-id -i ~/.ssh/my_ssh_key.pub -p 22366 ji@localhost

コマンドでは、次のオプションを適宜置き換える必要があります。

  • -i ~/.ssh/my_ssh_key.pub – キー ファイルを識別します。キー名 my_ssh_key をステップ 1 に従って自分のものに置き換えます。
  • -p 22366 – リモート SSH サーバーのリスニング ポートを示します。デフォルトは 22 です。
  • ji@localhost – 「ji」はログインしようとしているリモート サーバーのユーザー名、「localhost」はリモート ホスト名です。この場合、仮想マシンに SSH 接続しようとしています。これを username@server_ip_address に置き換える必要があります。

ssh-copy-id コマンドが正常に実行されると、リモート SSH サーバーにはデフォルトの ~/.ssh/authorized_keys に新しい行として「公開キー」が書き込まれます。 > ファイル。

次に、ローカル コンピュータで ssh -p xxx user@ip-address コマンドを試してください。秘密キーのロックを解除するためのパスワード (手順 1 で設定したもの) を求めるダイアログがポップアップ表示されます。

パスワードを何度も入力したくない場合は、ポップアップダイアログで「ログインするたびにこのキーのロックを自動的に解除する」にチェックを入れてください。

動作しない場合は、SSH サーバーの「pubkeyauthentication」が「yes」に設定されていること、および「.ssh/authorized_keys」が「authorizedkeysfile」として含まれていることを確認してください。通常、これらはデフォルトの SSH デーモン設定です。

識別するには、次のコマンドを使用します。

sudo sshd -T |grep -e "authorizedkeysfile" -e "pubkeyauthentication"

ステップ 3: パスワード SSH ログインを無効にする

すべてがうまくいけば、パスワード認証を無効にして SSH サーバーを保護できますが、これはオプションです。

1. まず、リモート SSH サーバーに接続します。次に、コマンドを実行して sshd デーモン構成ファイルを編集します。

sudo nano /etc/ssh/sshd_config

ファイルが開いたら、次の操作を実行します。

  • 「PasswordAuthentication yes」を見つけて、PasswordAuthentication no に設定します。 「#」が先頭にある場合は削除してください。そうしないと機能しません。
  • KbdInteractiveAuthentication 行が有効な場合 (先頭に # なし)、いいえ に設定します。これはワンタイム パスワード ログインに使用されますが、PAM 設定で無効にしない限り、静的パスワード ログインも可能です。
  • ChallengeResponseAuthentication が有効な場合は、no にも設定します。

最後に、Ctrl+S を押してファイルを保存し、Ctrl+X を押して終了します。

2. 次に、コマンドを実行して /etc/ssh/sshd_config.d/ ディレクトリの内容を一覧表示します。

ls /etc/ssh/sshd_config.d/

デフォルトではディレクトリは空です。ただし、そのディレクトリ内の .conf ファイルは、最初に /etc/ssh/sshd_config にロードされるため、SSH 設定をオーバーライドする可能性があります。

3.設定を検証し、エラーがあるかどうかを確認するには、次のコマンドを使用します。

sudo sshd -T | grep authentication

4.変更を適用するには、以下の 2 つのコマンドを 1 つずつ実行します。

sudo systemctl daemon-reload

sudo systemctl restart ssh.socket

古い Ubuntu 22.04 以前の場合は、代わりに以下のコマンドを実行して変更を適用できます。

sudo systemctl status ssh.service

関連記事