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