Debian 10でSSHキーをセットアップする方法

前書き

SSH(セキュアシェル)は、サーバーの管理と通信に使用される暗号化されたプロトコルです。 Debianサーバーを使用する場合、SSHを介してサーバーに接続されたターミナルセッションでほとんどの時間を過ごす可能性があります。

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

手順1-RSAキーペアの作成

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

ssh-keygen

デフォルトでは、 `+ ssh-keygen `は2048ビットのRSAキーペアを作成します。これはほとんどのユースケースで十分に安全です(オプションで ` -b 4096 +`フラグを渡して、より大きな4096ビットキーを作成できます)。 。

コマンドを入力すると、次の出力が表示されます。

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

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

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

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

その後、次のプロンプトが表示されます。

OutputEnter passphrase (empty for no passphrase):

ここでは、オプションで安全なパスフレーズを入力できますが、これを強くお勧めします。 パスフレーズは、セキュリティのレイヤーを追加して、権限のないユーザーがログインするのを防ぎます。 セキュリティの詳細については、https://www.digitalocean.com/community/tutorials/how-to-configure-ssh-key-based-authentication-on-a-linux-server [SSHの設定方法]のチュートリアルを参照してください。 Linuxサーバーでのキーベース認証]。

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

OutputYour identification has been saved in //.ssh/id_rsa.
Your public key has been saved in //.ssh/id_rsa.pub.
The key fingerprint is:
a9:49:2e:2a:5e:33:3e:a9:de:4e:77:11:58:b6:90:26 username@remote_host
The key's randomart image is:
+--[ RSA 2048]----+
|     ..o         |
|   E o= .        |
|    o. o         |
|        ..       |
|      ..S        |
|     o o.        |
|   =o.+.         |
|. =++..          |
|o=++.            |
+-----------------+

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

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

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

`+ ssh-copy-id`を使用して公開キーをコピーする

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

このユーティリティを使用するには、接続するリモートホストと、パスワードSSHアクセスのあるユーザーアカウントを指定するだけです。 これは、公開SSHキーのコピー先のアカウントです。

構文は次のとおりです。

ssh-copy-id @

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

OutputThe authenticity of host ' ()' 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
@'s password:

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

次のような出力が表示されるはずです。

OutputNumber of key(s) added: 1

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

この時点で、 `+ id_rsa.pub +`キーはリモートアカウントにアップロードされています。 https://www.digitalocean.com/community/tutorials/how-to-set-up-ssh-keys-on-debian-10#step-3-%E2%80%94-authenticate-に進むことができますto-debian-server-using-ssh-keys [ステップ3]。

SSHを使用した公開キーのコピー

`+ ssh-copy-id +`が利用できないが、サーバー上のアカウントへのパスワードベースのSSHアクセスがある場合、従来のSSH方式を使用してキーをアップロードできます。

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

一方、 `+〜/ .ssh +`ディレクトリが存在し、使用しているアカウントの下で正しい権限を持っていることを確認できます。

次に、パイプしたコンテンツをこのディレクトリ内の「+ authorized_keys 」というファイルに出力できます。 コンテンツを上書きする代わりに、「 >> +」リダイレクトシンボルを使用してコンテンツを追加します。 これにより、以前に追加したキーを破棄せずにキーを追加できます。

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

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

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

OutputThe authenticity of host ' ()' 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`を押して続行します。

その後、リモートユーザーアカウントのパスワードを入力するように求められます。

Output@'s password:

パスワードを入力すると、 `+ id_rsa.pub `キーのコンテンツがリモートユーザーのアカウントの ` authorized_keys +`ファイルの最後にコピーされます。 https://www.digitalocean.com/community/tutorials/how-to-set-up-ssh-keys-on-debian-10#step-3-%E2%80%94-authenticate-to-に進みますdebian-server-using-ssh-keys [ステップ3]これが成功した場合。

公開キーを手動でコピーする

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

`+ id_rsa.pub `ファイルの内容をリモートマシンの `〜/ .ssh / authorized_keys +`ファイルに手動で追加します。

`+ id_rsa.pub +`キーのコンテンツを表示するには、これをローカルコンピューターに入力します。

cat ~/.ssh/id_rsa.pub

キーのコンテンツが表示され、次のようになります。

Outputssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAACAQCqql6MzstZYh1TmWWv11q5O3pISj2ZFl9HgH1JLknLLx44+tXfJ7mIrKNxOOwxIxvcBF8PXSYvobFYEZjGIVCEAjrUzLiIxbyCoxVyle7Q+bqgZ8SeeM8wzytsY+dVGcBxF6N4JS+zVk5eMcV385gG3Y6ON3EG112n6d+SMXY0OEBIcO6x+PnUSGHrSgpBgX7Ks1r7xqFa7heJLLt2wWwkARptX7udSq05paBhcpB0pHtA1Rfz3K2B+ZVIpSDfki9UVKzT8JUmwW6NNzSgxUfQHGwnW7kj4jp4AT0VZk3ADw497M2G/12N0PPB5CnhHf7ovgy6nL1ikrygTKRFmNZISvAcywB9GVqNAVE+ZHDSCuURNsAInVzgYo9xgJDW8wUw2o8U77+xiFxgI5QSZX3Iq7YLMgeksaO4rBJEa54k8m5wEiEE1nUhLuJ0X/vh2xPff6SQ1BL/zkOhvJCACK6Vb15mDOeCSq54Cr7kvS46itMosi/uS66+PujOO+xt/2FWYepz6ZlN70bRly57Q06J+ZJoc9FfBCbCyYH7U/ASsmY095ywPsBo1XQ9PqhnN1/YOorJ068foQDNVpm146mUpILVxmq41Cj55YKHEazXGsdBIbXWhcrRf4G2fJLRcGUr9q8/lERo9oxRm5JFX6TCmj6kmiFqv+Ow9gI0x8GvaQ== demo@test

使用可能な方法を使用して、リモートホストにアクセスします。

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

mkdir -p ~/.ssh

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

echo  >> ~/.ssh/authorized_keys

上記のコマンドで、ローカルシステムで実行した + cat〜/ .ssh / id_rsa.pub`コマンドからの出力で + `を置き換えます。 ` ssh-rsa AAAA …​ +`で始まる必要があります。

最後に、 `〜/ .ssh +`ディレクトリと ` authorized_keys +`ファイルに適切なパーミッションが設定されていることを確認します:

chmod -R go= ~/.ssh

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

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

chown -R : ~/.ssh

このチュートリアルでは、ユーザーに名前を付けますが、適切なユーザー名を上記のコマンドに置き換える必要があります。

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

手順3-SSHキーを使用したDebianサーバーの認証

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

基本的なプロセスは同じです:

ssh @

このホストに初めて接続する場合(上記の最後の方法を使用した場合)、次のように表示されます。

OutputThe authenticity of host ' ()' 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`を押して続行します。

秘密鍵のパスフレーズを指定しなかった場合、すぐにログインされます。 キーを作成したときに秘密キーのパスフレーズを指定した場合、ここで入力するように求められます(セキュリティのために、キーストロークはターミナルセッションに表示されないことに注意してください)。 認証後、Debianサーバーで設定されたアカウントで新しいシェルセッションが開きます。

キーベースの認証が成功した場合は、パスワード認証を無効にしてシステムをさらに保護する方法を引き続き学習してください。

手順4-サーバーでパスワード認証を無効にする

パスワードなしでSSHを使用してアカウントにログインできた場合は、アカウントにSSHキーベースの認証が正常に設定されています。 ただし、パスワードベースの認証メカニズムはまだアクティブであるため、サーバーはブルートフォース攻撃にさらされています。

このセクションの手順を完了する前に、このサーバーのルートアカウントにSSHキーベースの認証が構成されていること、またはできればこのサーバーの非ルートアカウントにSSHキーベースの認証が構成されていることを確認してください`+ sudo +`権限を持つサーバー。 この手順により、パスワードベースのログインがロックダウンされるため、管理アクセスを取得できるようにすることが重要です。

リモートアカウントに管理者権限があることを確認したら、rootまたは `+ sudo +`権限を持つアカウントでSSHキーを使用してリモートサーバーにログインします。 次に、SSHデーモンの構成ファイルを開きます。

sudo nano /etc/ssh/sshd_config

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

/ etc / ssh / sshd_config

...
PasswordAuthentication no
...

完了したら、ファイルを保存して閉じ、 + CTRL + + `+ X `を押してから ` Y `を押してファイルの保存を確認し、最後に ` ENTER `を押してnanoを終了します。 これらの変更を実際に実装するには、 ` sshd +`サービスを再起動する必要があります。

sudo systemctl restart ssh

予防措置として、このセッションを閉じる前に、新しいターミナルウィンドウを開き、SSHサービスが正しく機能していることをテストします。

ssh @

SSHサービスを確認したら、現在のすべてのサーバーセッションを安全に閉じることができます。

Debianサーバー上のSSHデーモンは、SSHキーにのみ応答するようになりました。 パスワードベースの認証は正常に無効化されました。

結論

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

SSHの操作の詳細については、https://www.digitalocean.com/community/tutorials/ssh-essentials-working-with-ssh-servers-clients-and-keysをご覧ください[ SSH Essentials Guide]。