Debian11でSSHキーを設定する方法
序章
SSH(セキュアシェル)は、サーバーの管理と通信に使用される暗号化されたプロトコルです。 Debianサーバーで作業する場合、SSHを介してサーバーに接続されたターミナルセッションでほとんどの時間を費やす可能性があります。
このガイドでは、バニラのDebian11インストール用のSSHキーの設定に焦点を当てます。 SSHキーは、サーバーにログインするための簡単で安全な方法を提供し、すべてのユーザーに推奨されます。
ステップ1—RSAキーペアを作成します
最初のステップは、クライアントマシン(通常はコンピューター)でキーペアを作成することです。
- ssh-keygen
デフォルトでは ssh-keygen
3072ビットのRSAキーペアを作成します。これは、ほとんどのユースケースで十分に安全です(オプションで、 -b 4096
より大きな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)?
警告:ディスク上のキーを上書きすることを選択した場合、以前のキーを使用して認証することはできなくなります。 これは元に戻せない破壊的なプロセスであるため、[はい]を選択するときは十分に注意してください。
次に、次のプロンプトが表示されます。
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
The ssh-copy-id
ツールは多くのオペレーティングシステムにデフォルトで含まれているため、ローカルシステムで使用できる場合があります。 この方法を機能させるには、サーバーへのパスワードベースのSSHアクセスがすでに必要です。
ユーティリティを使用するには、接続するリモートホストとパスワードSSHアクセス権を持つユーザーアカウントを指定するだけです。 これは、公開SSHキーがコピーされるアカウントです。
構文は次のとおりです。
- ssh-copy-id username@remote_host
次のメッセージが表示される場合があります。
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
これは、ローカルコンピュータがリモートホストを認識しないことを意味します。 これは、新しいホストに初めて接続したときに発生します。 「はい」と入力してを押します 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
このディレクトリ内。 を使用します >>
シンボルをリダイレクトして、コンテンツを上書きするのではなく追加します。 これにより、以前に追加したキーを破棄せずにキーを追加できます。
完全なコマンドは次のようになります。
- cat ~/.ssh/id_rsa.pub | ssh username@remote_host "mkdir -p ~/.ssh && touch ~/.ssh/authorized_keys && chmod -R go= ~/.ssh && cat >> ~/.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
これは、ローカルコンピュータがリモートホストを認識しないことを意味します。 これは、新しいホストに初めて接続したときに発生します。 「はい」と入力してを押します ENTER
続ける。
その後、リモートユーザーアカウントのパスワードを入力するように求められます。
Outputusername@203.0.113.1's password:
パスワードを入力した後、あなたのコンテンツ id_rsa.pub
キーは最後にコピーされます authorized_keys
リモートユーザーのアカウントのファイル。 これが成功した場合は、ステップ3に進みます。
公開鍵を手動でコピーする
サーバーへのパスワードベースのSSHアクセスが利用できない場合は、上記のプロセスを手動で完了する必要があります。
手動でコンテンツを追加します id_rsa.pub
ファイルに ~/.ssh/authorized_keys
リモートマシン上のファイル。
あなたのコンテンツを表示するには id_rsa.pub
キー、これをローカルコンピュータに入力します。
- cat ~/.ssh/id_rsa.pub
キーの内容が表示されます。これは次のようになります。
Outputssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABgQDgkLJ8d2gGEJCN7xdyVaDqk8qgeZqQ0MlfoPK3TzWI5dkG0WiZ16jrkiW/h6lhO9K1w89VDMnmNN9ULOWHrZMNs//Qyv/oN+FLIgK2CkKXRxTmbh/ZGnqOm3Zo2eU+QAmjb8hSsstQ3DiuGu8tbiWmsa3k3jKbWNWpXqY3Q88t+bM1DZrHwYzaIZ1BSA1ghqHCvIZqeP9IUL2l2DUfSCT9LXJEgMQhgjakJnzEGPgd5VHMR32rVrbIbbDzlyyoZ7SpCe5y0vYvbV2JKWI/8SEOmwehEHJ9RBZmciwc+1sdEcAJVMDujb9p5rX4hyvFpG0KGhZesB+/s7PdOa8zlIg4TZhXUHl4t1jpPC83Y9KEwS/Ni4dhaxlnr3T6l5hUX2cD+eWl1vVpogBqKNGBMrVR4dWs3Z4BVUf9exqTRRYOfgo0UckULqW5pmLW07JUuGo1kpFAxpDBPFWoPsg08CGRdEUS7ScRnMK1KdcH54kUZr0O88SZOsv9Zily/A5GyNM= demo@test
使用可能な方法を使用して、リモートホストにアクセスします。
リモートサーバー上のアカウントにアクセスできるようになったら、次のことを確認する必要があります。 ~/.ssh
ディレクトリが存在します。 このコマンドは、必要に応じてディレクトリを作成します。ディレクトリがすでに存在する場合は何もしません。
- mkdir -p ~/.ssh
これで、作成または変更できます authorized_keys
このディレクトリ内のファイル。 あなたはあなたのコンテンツを追加することができます id_rsa.pub
最後までファイル authorized_keys
ファイル、必要に応じて次のコマンドを使用して作成します。
- echo public_key_string >> ~/.ssh/authorized_keys
上記のコマンドで、 public_key_string
からの出力で cat ~/.ssh/id_rsa.pub
ローカルシステムで実行したコマンド。 それはで始まる必要があります ssh-rsa AAAA...
.
最後に、 ~/.ssh
ディレクトリと authorized_keys
ファイルには適切な権限が設定されています。
- chmod -R go= ~/.ssh
これにより、 ~/.ssh/
ディレクトリ。
を使用している場合 root
アカウントを使用してユーザーアカウントのキーを設定するには、次のことも重要です。 ~/.ssh
ディレクトリはユーザーに属し、ではありません root
:
- chown -R sammy:sammy ~/.ssh
このチュートリアルでは、ユーザーの名前は sammy ですが、上記のコマンドに適切なユーザー名を代入する必要があります。
これで、Debianサーバーでパスワードなしの認証を試みることができます。
ステップ3—SSHキーを使用してDebianサーバーを認証する
上記の手順のいずれかを正常に完了すると、リモートアカウントのパスワードなしでリモートホストにログインできるようになります。
一般的なプロセスは同じです。
- ssh username@remote_host
このホストに初めて接続する場合(上記の最後の方法を使用した場合)、次のように表示される場合があります。
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キーベースの認証が正常に構成されています。 ただし、パスワードベースの認証メカニズムは引き続きアクティブです。つまり、サーバーはブルートフォース攻撃にさらされたままです。
このセクションの手順を完了する前に、このサーバーのルートアカウントにSSHキーベースの認証が構成されていること、またはできれば、このサーバーの非ルートアカウントにSSHキーベースの認証が構成されていることを確認してください。サーバーと sudo
特権。 この手順では、パスワードベースのログインがロックダウンされるため、管理アクセスを引き続き取得できるようにすることが重要です。
リモートアカウントに管理者権限があることを確認したら、rootとして、または次のアカウントを使用して、SSHキーを使用してリモートサーバーにログインします。 sudo
特権。 次に、SSHデーモンの構成ファイルを開きます。
- sudo nano /etc/ssh/sshd_config
ファイル内で、というディレクティブを検索します PasswordAuthentication
. これはコメントアウトされる場合があります。 行のコメントを解除し、値を「no」に設定します。 これにより、アカウントのパスワードを使用してSSH経由でログインする機能が無効になります。
...
PasswordAuthentication no
...
終了したら、を押してファイルを保存して閉じます CTRL
+ X
、 それから Y
ファイルの保存を確認し、最後に ENTER
nanoを終了します。 これらの変更を実際に実装するには、再起動する必要があります sshd
サービス:
- sudo systemctl restart ssh
予防措置として、このセッションを閉じる前に、新しいターミナルウィンドウを開き、SSHサービスが正しく機能していることをテストしてください。
- ssh username@remote_host
SSHサービスを確認したら、現在のすべてのサーバーセッションを安全に閉じることができます。
Debianサーバー上のSSHデーモンはSSHキーにのみ応答するようになりました。 パスワードベースの認証が正常に無効になりました。
結論
これで、サーバーにSSHキーベースの認証が構成され、アカウントのパスワードを入力しなくてもサインインできるようになります。
SSHの操作について詳しく知りたい場合は、 SSH EssentialsGuideをご覧ください。