紹介
SSH、またはセキュアシェル、はサーバーを管理および通信するために使用される暗号化されたプロトコルです。Rocky Linuxサーバーで作業する場合、おそらくSSHを介してサーバーに接続した端末セッションでほとんどの時間を費やすことになります。
このガイドでは、Rocky Linux 9サーバーに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 (/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):
ここで、セキュアなパスフレーズをオプションで入力できます。パスフレーズを使用することを強くお勧めします。パスフレーズは、認可されていないユーザーがログインできないように、キーに追加のセキュリティレイヤーを追加します。
次に、次の出力が表示されます:
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:
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キーがコピーされるアカウントです。
- 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
これは、ローカルコンピューターがリモートホストを認識していないことを意味します。これは、新しいホストに接続する初めての場合に発生します。続行するには、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
これは、ローカルコンピュータがリモートホストを認識していないことを意味します。これは新しいホストに初めて接続するときに発生します。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 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
ディレクトリが存在することを確認してください。次のコマンドは、ディレクトリが存在しない場合に作成し、既に存在している場合は何もしません。
- mkdir -p ~/.ssh
今、このディレクトリ内でauthorized_keys
ファイルを作成または変更できます。このコマンドを使用して、authorized_keys
ファイルの末尾にid_rsa.pub
ファイルの内容を追加できます。必要に応じてファイルを作成します:
- 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ですが、上記のコマンドに適切なユーザー名を置き換えてください。
これでRocky Linuxサーバーで鍵ベースの認証を試行できます。
ステップ3 — SSHキーを使用してRocky Linuxサーバーにログインする
上記の手順のいずれかを正常に完了した場合、リモートホストにパスワードなしでログインできるはずです。
最初のプロセスは、パスワードベースの認証と同じです。
- 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
キーを押して続行してください。
ステップ1でキーペアを作成する際にパスフレーズを入力しなかった場合、すぐにログインされます。パスフレーズを入力した場合は、ここで入力を求められます。認証が完了すると、Rocky Linux サーバーの設定されたアカウントで新しいシェルセッションが開かれるはずです。
キーベースの認証が成功したら、SSHサーバーのパスワードベースの認証を無効にしてシステムをさらにセキュアにする方法を学びましょう。
ステップ4 — サーバー上でのパスワード認証の無効化
パスワードなしでSSHを使用してアカウントにログインできた場合、アカウントに対してSSHキーベースの認証を正常に設定しました。ただし、パスワードベースの認証メカニズムはまだ有効なままであり、サーバーは引き続きブルートフォース攻撃の対象となっています。
ユーザー:このセクションの手順を完了する前に、このサーバーのrootアカウントにSSHキーベースの認証が設定されているか、さらに良い場合はこのサーバーの非rootアカウントにsudo
権限でSSHキーベースの認証が設定されていることを確認してください。この手順ではパスワードベースのログインをロックアウトするため、管理アクセスを引き続き取得できるようにすることが重要です。
リモートアカウントが管理権限を持っていることを確認したら、SSHキーを使用してリモートサーバーにrootまたはsudo
権限を持つアカウントとしてログインします。その後、SSHデーモンの構成ファイルを開きます:
- sudo vi /etc/ssh/sshd_config
ファイル内でPasswordAuthentication
というディレクティブを検索します。これは#
ハッシュでコメントアウトされている場合があります。挿入モードにするためにi
を押し、次に行のコメントを外して値をno
に設定します。これにより、アカウントパスワードを使用してSSHでログインできなくなります:
...
PasswordAuthentication no
...
変更を終えたら、ESC
を押し、変更内容をファイルに書き込んで終了するために:wq
を押します。これらの変更を実際に適用するには、sshd
サービスを再起動する必要があります:
- sudo systemctl restart sshd
予防措置として、新しいターミナルウィンドウを開き、SSHサービスが正しく機能しているかどうかを現在のセッションを閉じる前にテストしてください:
- 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