序章

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

このガイドでは、Ubuntu22.04インストール用のSSHキーの設定に焦点を当てます。 SSHキーは、サーバーに安全にログインする方法を提供し、すべてのユーザーに推奨されます。

ステップ1—キーペアを作成する

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

  1. ssh-keygen

デフォルトでは、最近のバージョン ssh-keygen 3072ビットのRSAキーペアを作成します。これは、ほとんどのユースケースで十分に安全です(オプションで、 -b 4096 より大きな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)?

ディスク上のキーを上書きすることを選択した場合、以前のキーを使用して認証することはできなくなります。 これは元に戻せない破壊的なプロセスであるため、[はい]を選択するときは十分に注意してください。

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

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:/hk7MJ5n5aiqdfTVUZr+2Qt+qCiS7BIm5Iv0dxrc3ks user@host The key's randomart image is: +---[RSA 3072]----+ | .| | + | | + | | . o . | |o S . o | | + o. .oo. .. .o| |o = oooooEo+ ...o| |.. o *o+=.*+o....| | =+=ooB=o.... | +----[SHA256]-----+

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

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

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

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

The 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

これは、ローカルコンピュータがリモートホストを認識しないことを意味します。 これは、新しいホストに初めて接続したときに発生します。 「はい」と入力してを押します 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 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 ディレクトリが存在します。 このコマンドは、必要に応じてディレクトリを作成します。ディレクトリがすでに存在する場合は何もしません。

  1. mkdir -p ~/.ssh

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

  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 ですが、上記のコマンドに適切なユーザー名を代入する必要があります。

これで、Ubuntuサーバーでパスワードなしの認証を試みることができます。

ステップ3—SSHキーを使用したUbuntuサーバーへの認証

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

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

  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 続ける。

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

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

ステップ4—サーバーでのパスワード認証の無効化

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

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

注: DigitalOceanドロップレットの作成時にSSHキーを指定した場合、パスワード認証が自動的に無効になっている可能性があります。 読み進めることで、これを確認できます。

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

  1. sudo nano /etc/ssh/sshd_config

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

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

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

  1. sudo systemctl restart ssh

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

  1. ssh username@remote_host

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

Ubuntuサーバー上のSSHデーモンは、SSHキーベースの認証にのみ応答するようになりました。 パスワードベースのログインが無効になっています。

結論

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

SSHの操作について詳しく知りたい場合は、 SSH EssentialsGuideをご覧ください。