Debian 11でSSHキーを設定する方法

紹介

SSH、またはセキュアシェルは、サーバーの管理および通信に使用される暗号化されたプロトコルです。Debianサーバーで作業する場合、おそらくSSHを介してサーバーに接続した端末セッションでほとんどの時間を過ごすことになるでしょう。

このガイドでは、バニラのDebian 11インストールにSSHキーを設定する方法に焦点を当てます。SSHキーは、サーバーにログインするための簡単で安全な方法を提供し、すべてのユーザーに推奨されています。

ステップ1 — RSAキーペアの作成

最初のステップは、クライアントマシン(通常はコンピューター)でキーペアを作成することです。

  1. ssh-keygen

デフォルトでは、ssh-keygenは、ほとんどのユースケースには十分なセキュリティを提供する3072ビットのRSAキーペアを作成します(より大きな4096ビットのキーを作成するには、オプションで-b 4096フラグを渡すことができます)。

コマンドを入力した後、次の出力が表示されます:

Output
Generating public/private rsa key pair. Enter file in which to save the key (/your_home/.ssh/id_rsa):

Enterキーを押して、ホームディレクトリ内の.ssh/サブディレクトリにキーペアを保存するか、別のパスを指定します。

以前にSSHキーペアを生成していた場合、次のプロンプトが表示される場合があります:

Output
/home/your_home/.ssh/id_rsa already exists. Overwrite (y/n)?

警告: ディスク上のキーを上書きすることを選択すると、以前のキーを使用して認証することはできなくなります。no 以前のキーを使用して認証することはできなくなります。yes を選択する際には非常に注意してください。これは、元に戻すことができない破壊的なプロセスです。

次のプロンプトが表示されます:

Output
Enter passphrase (empty for no passphrase):

ここで、オプションでセキュアなパスフレーズを入力することができます。これは強くお勧めします。パスフレーズは、不正なユーザーがログインできないようにするための追加のセキュリティレイヤーを追加します。セキュリティについて詳しくは、当社の「Linux サーバーで SSH キー認証を設定する方法」チュートリアルを参照してください。

次の出力が表示されます:

Output
Your identification has been saved in /your_home/.ssh/id_rsa. Your public key has been saved in /your_home/.ssh/id_rsa.pub. The key fingerprint is: SHA256:5E2BtTN9FHPBNoRXAB/EdjtHNYOHzTBzG5qUv7S3hyM root@debian-suricata The key's randomart image is: +---[RSA 3072]----+ | oo .O^XB| | . +.BO%B| | . = .+B+o| | o o o . =.| | S . . =| | o.| | .o| | E o..| | . ..| +----[SHA256]-----+

これで、認証に使用できる公開鍵と秘密鍵が得られます。次のステップは、サーバーに公開鍵を配置して、SSH キー認証を使用してログインできるようにすることです。

ステップ 2 — Debian サーバーに公開鍵をコピーする

公開鍵を Debian ホストにコピーする最も簡単な方法は、ssh-copy-id というユーティリティを使用することです。そのため、利用可能な場合はこの方法を強くお勧めします。クライアントマシンで ssh-copy-id を利用できない場合は、このセクションで提供されている 2 つの代替方法のいずれかを使用できます(パスワードベースの SSH を介してコピーするか、キーを手動でコピーするか)。

「ssh-copy-id」を使用した公開キーのコピー

ssh-copy-idツールは、多くのオペレーティングシステムにデフォルトで含まれているため、ローカルシステムで利用できる場合があります。この方法を使用するには、すでにサーバーへのパスワードベースのSSHアクセス権を持っている必要があります。

このユーティリティを使用するには、単に接続したいリモートホストと、パスワードSSHアクセス権を持っているユーザーアカウントを指定する必要があります。これは、公開SSHキーがコピーされるアカウントです。

構文は以下の通りです:

  1. ssh-copy-id username@remote_host

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

Output
The authenticity of host '203.0.113.1 (203.0.113.1)' can't be established. ECDSA key fingerprint is fd:fd:d4:f9:77:fe:73:84:e1:55:00:ad:d6:6d:22:fe. Are you sure you want to continue connecting (yes/no)? yes

これは、ローカルコンピューターがリモートホストを認識していないことを意味します。これは、新しいホストに初めて接続するときに発生します。 「yes」と入力し、ENTERを押して続行します。

次に、ユーティリティはローカルアカウントをスキャンし、前に作成したid_rsa.pubキーを探します。キーを見つけると、リモートユーザーアカウントのパスワードを入力するように求められます:

Output
/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 username@203.0.113.1's password:

パスワードを入力して(セキュリティ上の理由から入力内容は表示されません)、ENTERを押します。ユーティリティは、提供したパスワードを使用してリモートホストのアカウントに接続します。次に、~/.ssh/id_rsa.pubキーの内容を、リモートアカウントのホーム~/.sshディレクトリにauthorized_keysという名前のファイルにコピーします。

次の出力が表示されるはずです:

Output
Number of key(s) added: 1 Now try logging into the machine, with: "ssh 'username@203.0.113.1'" and check to make sure that only the key(s) you wanted were added.

この時点で、id_rsa.pubキーがリモートアカウントにアップロードされています。次にステップ3に進むことができます。

SSHを使用して公開鍵をコピーする

ssh-copy-idを使用できない場合でも、サーバーのアカウントにパスワードベースのSSHアクセス権がある場合は、従来のSSHメソッドを使用してキーをアップロードできます。

これは、catコマンドを使用してローカルコンピューター上の公開SSHキーの内容を読み取り、それをSSH接続を介してリモートサーバーにパイプ処理することで行うことができます。

その他の方では、使用しているアカウントの下に~/.sshディレクトリが存在し、正しいアクセス許可を持っていることを確認できます。

その後、パイプ処理した内容をこのディレクトリ内のauthorized_keysという名前のファイルに出力します。追加するキーを前に追加されたキーを破壊せずに追加できるように、内容を上書きせずに追加するために>>リダイレクト記号を使用します。

完全なコマンドは次のようになります:

  1. cat ~/.ssh/id_rsa.pub | ssh username@remote_host "mkdir -p ~/.ssh && touch ~/.ssh/authorized_keys && chmod -R go= ~/.ssh && cat >> ~/.ssh/authorized_keys"

以下のメッセージが表示される場合があります:

Output
The authenticity of host '203.0.113.1 (203.0.113.1)' can't be established. ECDSA key fingerprint is fd:fd:d4:f9:77:fe:73:84:e1:55:00:ad:d6:6d:22:fe. Are you sure you want to continue connecting (yes/no)? yes

これは、ローカルコンピューターがリモートホストを認識していないことを意味します。これは新しいホストに初めて接続する場合に発生します。 “yes”と入力し、ENTERを押して続行してください。

その後、リモートユーザーアカウントのパスワードを入力するようにプロンプトが表示されます:

Output
username@203.0.113.1's password:

パスワードを入力した後、id_rsa.pubキーの内容がリモートユーザーアカウントのauthorized_keysファイルの末尾にコピーされます。これが成功した場合は、ステップ3に進んでください。

公開鍵の手動コピー

サーバーへのパスワードベースのSSHアクセスが利用できない場合は、上記のプロセスを手動で完了する必要があります。

ローカルコンピュータにid_rsa.pubファイルの内容を~/.ssh/authorized_keysファイルに手動で追加します。

id_rsa.pubキーの内容を表示するには、ローカルコンピュータで次のコマンドを入力します:

  1. cat ~/.ssh/id_rsa.pub

キーの内容が表示されます。これは次のようになります:

Output
ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABgQDgkLJ8d2gGEJCN7xdyVaDqk8qgeZqQ0MlfoPK3TzWI5dkG0WiZ16jrkiW/h6lhO9K1w89VDMnmNN9ULOWHrZMNs//Qyv/oN+FLIgK2CkKXRxTmbh/ZGnqOm3Zo2eU+QAmjb8hSsstQ3DiuGu8tbiWmsa3k3jKbWNWpXqY3Q88t+bM1DZrHwYzaIZ1BSA1ghqHCvIZqeP9IUL2l2DUfSCT9LXJEgMQhgjakJnzEGPgd5VHMR32rVrbIbbDzlyyoZ7SpCe5y0vYvbV2JKWI/8SEOmwehEHJ9RBZmciwc+1sdEcAJVMDujb9p5rX4hyvFpG0KGhZesB+/s7PdOa8zlIg4TZhXUHl4t1jpPC83Y9KEwS/Ni4dhaxlnr3T6l5hUX2cD+eWl1vVpogBqKNGBMrVR4dWs3Z4BVUf9exqTRRYOfgo0UckULqW5pmLW07JUuGo1kpFAxpDBPFWoPsg08CGRdEUS7ScRnMK1KdcH54kUZr0O88SZOsv9Zily/A5GyNM= demo@test

利用可能な方法でリモートホストにアクセスしてください。

リモートサーバーのアカウントにアクセスできたら、~/.sshディレクトリが存在することを確認してください。このコマンドは、必要に応じてディレクトリを作成し、すでに存在する場合は何もしません:

  1. mkdir -p ~/.ssh

今、このディレクトリ内でauthorized_keysファイルを作成または変更できます。このコマンドを使用して、authorized_keysファイルの末尾にid_rsa.pubファイルの内容を追加できます。必要に応じて、ファイルを作成します。

  1. echo public_key_string >> ~/.ssh/authorized_keys

上記のコマンドで、public_key_stringを、ローカルシステムで実行したcat ~/.ssh/id_rsa.pubコマンドの出力で置き換えます。これはssh-rsa AAAA...で始まるはずです。

最後に、~/.sshディレクトリとauthorized_keysファイルの適切なアクセス権を設定します。

  1. chmod -R go= ~/.ssh

これにより、~/.ssh/ディレクトリのすべての「グループ」および「その他」のアクセス権が再帰的に削除されます。

ユーザーアカウントの鍵を設定するためにrootアカウントを使用している場合は、~/.sshディレクトリがユーザーに属していることが重要です。rootではなく:

  1. chown -R sammy:sammy ~/.ssh

このチュートリアルではユーザーの名前をsammyとしていますが、適切なユーザー名を上記のコマンドに置き換えてください。

これでDebianサーバーでパスワードレス認証を試みることができます。

ステップ3 — SSHキーを使用してDebianサーバーに認証する

もし上記の手順のいずれかを正常に完了した場合、リモートホストにリモートアカウントのパスワードなしでログインできるはずです。

一般的なプロセスは同じです:

  1. ssh username@remote_host

これがこのホストに接続するのが初めての場合(前述の方法を使用した場合)、次のようなものが表示されるかもしれません:

Output
The authenticity of host '203.0.113.1 (203.0.113.1)' can't be established. ECDSA key fingerprint is fd:fd:d4:f9:77:fe:73:84:e1:55:00:ad:d6:6d:22:fe. Are you sure you want to continue connecting (yes/no)? yes

これは、ローカルコンピュータがリモートホストを認識していないことを意味します。 “yes” と入力し、ENTER を押して続行します。

プライベートキーにパスフレーズを指定しなかった場合、すぐにログインされます。キーを作成するときにプライベートキーにパスフレーズを指定した場合、そのパスフレーズを入力するようにプロンプトが表示されます(セキュリティのため、キーストロークはターミナルセッションに表示されません)。認証が完了すると、Debianサーバーの構成されたアカウントで新しいシェルセッションが開かれるはずです。

キーベースの認証が成功した場合は、パスワード認証を無効にすることでシステムをさらにセキュアにする方法を学びましょう。

ステップ4 — サーバーでパスワード認証を無効にする

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

このセクションの手順を完了する前に、このサーバーのrootアカウントにSSHキー認証が設定されているか、またはより良い方法として、このサーバーの非rootアカウントでsudo特権を持つユーザーにSSHキー認証が設定されていることを確認してください。

管理特権を持つリモートアカウントがあることを確認したら、SSHキーでリモートサーバーにログインしてください。rootユーザーとして、またはsudo特権を持つアカウントとして。

  1. sudo nano /etc/ssh/sshd_config

その後、SSHデーモンの構成ファイルを開きます:

/etc/ssh/sshd_config
...
PasswordAuthentication no
...

ファイル内で、PasswordAuthenticationというディレクティブを検索します。これはコメントアウトされている場合があります。その行のコメントを外し、値を「no」に設定します。これにより、アカウントのパスワードを使用してSSH経由でログインする能力が無効になります:

  1. sudo systemctl restart ssh

変更を実際に実装するには、sshdサービスを再起動する必要があります:

  1. ssh username@remote_host

予防措置として、新しいターミナルウィンドウを開いて、このセッションを閉じる前にSSHサービスが正常に機能しているかどうかをテストしてください:

SSHデーモンはDebianサーバーで今やSSHキーにのみ応答します。パスワード認証は正常に無効にされました。

結論

サーバー上でSSHキー認証を構成しましたので、アカウントのパスワードを入力せずにサインインできるようになりました。

SSHの操作方法についてもっと学びたい場合は、SSHエッセンシャルガイドをご覧ください。

Source:
https://www.digitalocean.com/community/tutorials/how-to-set-up-ssh-keys-on-debian-11