紹介
SSH、またはセキュアシェルは、サーバーの管理および通信に使用される暗号化されたプロトコルです。Debianサーバーで作業する場合、おそらくSSHを介してサーバーに接続した端末セッションでほとんどの時間を過ごすことになるでしょう。
このガイドでは、バニラのDebian 11インストールにSSHキーを設定する方法に焦点を当てます。SSHキーは、サーバーにログインするための簡単で安全な方法を提供し、すべてのユーザーに推奨されています。
ステップ1 — RSAキーペアの作成
最初のステップは、クライアントマシン(通常はコンピューター)でキーペアを作成することです。
デフォルトでは、ssh-keygen
は、ほとんどのユースケースには十分なセキュリティを提供する3072ビットのRSAキーペアを作成します(より大きな4096ビットのキーを作成するには、オプションで-b 4096
フラグを渡すことができます)。
コマンドを入力した後、次の出力が表示されます:
OutputGenerating 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 を選択する際には非常に注意してください。これは、元に戻すことができない破壊的なプロセスです。
次のプロンプトが表示されます:
OutputEnter passphrase (empty for no passphrase):
ここで、オプションでセキュアなパスフレーズを入力することができます。これは強くお勧めします。パスフレーズは、不正なユーザーがログインできないようにするための追加のセキュリティレイヤーを追加します。セキュリティについて詳しくは、当社の「Linux サーバーで SSH キー認証を設定する方法」チュートリアルを参照してください。
次の出力が表示されます:
OutputYour 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キーがコピーされるアカウントです。
構文は以下の通りです:
次のメッセージが表示される場合があります:
OutputThe 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
という名前のファイルにコピーします。
次の出力が表示されるはずです:
OutputNumber 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
という名前のファイルに出力します。追加するキーを前に追加されたキーを破壊せずに追加できるように、内容を上書きせずに追加するために>>
リダイレクト記号を使用します。
完全なコマンドは次のようになります:
以下のメッセージが表示される場合があります:
OutputThe 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
を押して続行してください。
その後、リモートユーザーアカウントのパスワードを入力するようにプロンプトが表示されます:
Outputusername@203.0.113.1's password:
パスワードを入力した後、id_rsa.pub
キーの内容がリモートユーザーアカウントのauthorized_keys
ファイルの末尾にコピーされます。これが成功した場合は、ステップ3に進んでください。
公開鍵の手動コピー
サーバーへのパスワードベースのSSHアクセスが利用できない場合は、上記のプロセスを手動で完了する必要があります。
ローカルコンピュータにid_rsa.pub
ファイルの内容を~/.ssh/authorized_keys
ファイルに手動で追加します。
id_rsa.pub
キーの内容を表示するには、ローカルコンピュータで次のコマンドを入力します:
キーの内容が表示されます。これは次のようになります:
Outputssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABgQDgkLJ8d2gGEJCN7xdyVaDqk8qgeZqQ0MlfoPK3TzWI5dkG0WiZ16jrkiW/h6lhO9K1w89VDMnmNN9ULOWHrZMNs//Qyv/oN+FLIgK2CkKXRxTmbh/ZGnqOm3Zo2eU+QAmjb8hSsstQ3DiuGu8tbiWmsa3k3jKbWNWpXqY3Q88t+bM1DZrHwYzaIZ1BSA1ghqHCvIZqeP9IUL2l2DUfSCT9LXJEgMQhgjakJnzEGPgd5VHMR32rVrbIbbDzlyyoZ7SpCe5y0vYvbV2JKWI/8SEOmwehEHJ9RBZmciwc+1sdEcAJVMDujb9p5rX4hyvFpG0KGhZesB+/s7PdOa8zlIg4TZhXUHl4t1jpPC83Y9KEwS/Ni4dhaxlnr3T6l5hUX2cD+eWl1vVpogBqKNGBMrVR4dWs3Z4BVUf9exqTRRYOfgo0UckULqW5pmLW07JUuGo1kpFAxpDBPFWoPsg08CGRdEUS7ScRnMK1KdcH54kUZr0O88SZOsv9Zily/A5GyNM= demo@test
利用可能な方法でリモートホストにアクセスしてください。
リモートサーバーのアカウントにアクセスできたら、~/.ssh
ディレクトリが存在することを確認してください。このコマンドは、必要に応じてディレクトリを作成し、すでに存在する場合は何もしません:
今、このディレクトリ内でauthorized_keys
ファイルを作成または変更できます。このコマンドを使用して、authorized_keys
ファイルの末尾にid_rsa.pub
ファイルの内容を追加できます。必要に応じて、ファイルを作成します。
上記のコマンドで、public_key_string
を、ローカルシステムで実行したcat ~/.ssh/id_rsa.pub
コマンドの出力で置き換えます。これはssh-rsa AAAA...
で始まるはずです。
最後に、~/.ssh
ディレクトリとauthorized_keys
ファイルの適切なアクセス権を設定します。
これにより、~/.ssh/
ディレクトリのすべての「グループ」および「その他」のアクセス権が再帰的に削除されます。
ユーザーアカウントの鍵を設定するためにroot
アカウントを使用している場合は、~/.ssh
ディレクトリがユーザーに属していることが重要です。root
ではなく:
このチュートリアルではユーザーの名前をsammyとしていますが、適切なユーザー名を上記のコマンドに置き換えてください。
これでDebianサーバーでパスワードレス認証を試みることができます。
ステップ3 — SSHキーを使用してDebianサーバーに認証する
もし上記の手順のいずれかを正常に完了した場合、リモートホストにリモートアカウントのパスワードなしでログインできるはずです。
一般的なプロセスは同じです:
これがこのホストに接続するのが初めての場合(前述の方法を使用した場合)、次のようなものが表示されるかもしれません:
OutputThe 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特権を持つアカウントとして。
その後、SSHデーモンの構成ファイルを開きます:
...
PasswordAuthentication no
...
ファイル内で、PasswordAuthentication
というディレクティブを検索します。これはコメントアウトされている場合があります。その行のコメントを外し、値を「no」に設定します。これにより、アカウントのパスワードを使用してSSH経由でログインする能力が無効になります:
変更を実際に実装するには、sshd
サービスを再起動する必要があります:
予防措置として、新しいターミナルウィンドウを開いて、このセッションを閉じる前にSSHサービスが正常に機能しているかどうかをテストしてください:
SSHデーモンはDebianサーバーで今やSSHキーにのみ応答します。パスワード認証は正常に無効にされました。
結論
サーバー上でSSHキー認証を構成しましたので、アカウントのパスワードを入力せずにサインインできるようになりました。
SSHの操作方法についてもっと学びたい場合は、SSHエッセンシャルガイドをご覧ください。
Source:
https://www.digitalocean.com/community/tutorials/how-to-set-up-ssh-keys-on-debian-11