Rocky Linux 9でSSHキーを設定する方法

紹介

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

このガイドでは、Rocky Linux 9サーバーにSSHキーを設定する方法に焦点を当てます。SSHキーは、サーバーにログインする直感的で安全な方法を提供し、すべてのユーザーに推奨されます。

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

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

  1. ssh-keygen

デフォルトでは、ssh-keygenは2048ビットの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):

ここで、セキュアなパスフレーズをオプションで入力できます。パスフレーズを使用することを強くお勧めします。パスフレーズは、認可されていないユーザーがログインできないように、キーに追加のセキュリティレイヤーを追加します。

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

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: 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 — Rocky Linuxサーバーに公開鍵をコピーする

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

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 AAAAB3NzaC1yc2EAAAADAQABAAACAQCqql6MzstZYh1TmWWv11q5O3pISj2ZFl9HgH1JLknLLx44+tXfJ7mIrKNxOOwxIxvcBF8PXSYvobFYEZjGIVCEAjrUzLiIxbyCoxVyle7Q+bqgZ8SeeM8wzytsY+dVGcBxF6N4JS+zVk5eMcV385gG3Y6ON3EG112n6d+SMXY0OEBIcO6x+PnUSGHrSgpBgX7Ks1r7xqFa7heJLLt2wWwkARptX7udSq05paBhcpB0pHtA1Rfz3K2B+ZVIpSDfki9UVKzT8JUmwW6NNzSgxUfQHGwnW7kj4jp4AT0VZk3ADw497M2G/12N0PPB5CnhHf7ovgy6nL1ikrygTKRFmNZISvAcywB9GVqNAVE+ZHDSCuURNsAInVzgYo9xgJDW8wUw2o8U77+xiFxgI5QSZX3Iq7YLMgeksaO4rBJEa54k8m5wEiEE1nUhLuJ0X/vh2xPff6SQ1BL/zkOhvJCACK6Vb15mDOeCSq54Cr7kvS46itMosi/uS66+PujOO+xt/2FWYepz6ZlN70bRly57Q06J+ZJoc9FfBCbCyYH7U/ASsmY095ywPsBo1XQ9PqhnN1/YOorJ068foQDNVpm146mUpILVxmq41Cj55YKHEazXGsdBIbXWhcrRf4G2fJLRcGUr9q8/lERo9oxRm5JFX6TCmj6kmiFqv+Ow9gI0x8GvaQ== sammy@host

利用可能な方法でリモートホストにログインします。

リモートサーバー上のアカウントにアクセスできるようになったら、~/.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ですが、上記のコマンドに適切なユーザー名を置き換えてください。

これでRocky Linuxサーバーで鍵ベースの認証を試行できます。

ステップ3 — SSHキーを使用してRocky Linuxサーバーにログインする

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

最初のプロセスは、パスワードベースの認証と同じです。

  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 キーを押して続行してください。

ステップ1でキーペアを作成する際にパスフレーズを入力しなかった場合、すぐにログインされます。パスフレーズを入力した場合は、ここで入力を求められます。認証が完了すると、Rocky Linux サーバーの設定されたアカウントで新しいシェルセッションが開かれるはずです。

キーベースの認証が成功したら、SSHサーバーのパスワードベースの認証を無効にしてシステムをさらにセキュアにする方法を学びましょう。

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

パスワードなしでSSHを使用してアカウントにログインできた場合、アカウントに対してSSHキーベースの認証を正常に設定しました。ただし、パスワードベースの認証メカニズムはまだ有効なままであり、サーバーは引き続きブルートフォース攻撃の対象となっています。

ユーザー:このセクションの手順を完了する前に、このサーバーのrootアカウントにSSHキーベースの認証が設定されているか、さらに良い場合はこのサーバーの非rootアカウントにsudo権限でSSHキーベースの認証が設定されていることを確認してください。この手順ではパスワードベースのログインをロックアウトするため、管理アクセスを引き続き取得できるようにすることが重要です。

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

  1. sudo vi /etc/ssh/sshd_config

ファイル内でPasswordAuthenticationというディレクティブを検索します。これは#ハッシュでコメントアウトされている場合があります。挿入モードにするためにiを押し、次に行のコメントを外して値をnoに設定します。これにより、アカウントパスワードを使用してSSHでログインできなくなります:

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

変更を終えたら、ESCを押し、変更内容をファイルに書き込んで終了するために:wqを押します。これらの変更を実際に適用するには、sshdサービスを再起動する必要があります:

  1. sudo systemctl restart sshd

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

  1. ssh username@remote_host

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

Rocky LinuxサーバーのSSHデーモンは今やSSHキーのみに応答します。パスワードベースの認証は正常に無効になりました。

結論

サーバーにSSHキー認証が設定されましたので、アカウントのパスワードを提供せずにサインインできるようになりました。

SSHに関する詳細を学びたい場合は、当社のSSH Essentials Guideをご覧ください。

Source:
https://www.digitalocean.com/community/tutorials/how-to-set-up-ssh-keys-on-rocky-linux-9