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):

ホームディレクトリの.ssh/サブディレクトリに鍵ペアを保存する場合は、ENTERキーを押してください。別のパスを指定することもできます。

もし以前に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が使用できない場合は、以下の2つの代替方法(パスワードベースのSSHを使用したコピー、または鍵の手動コピー)のいずれかを使用することができます。

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の方法を使ってキーをアップロードすることができます。

私たちは、ローカルコンピュータ上の公開SSHキーの内容を読み込むためにcatコマンドを使用し、それを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ファイルを作成または変更することができます。必要に応じて、id_rsa.pubファイルの内容をauthorized_keysファイルの末尾に追加することができます。以下のコマンドを使用して、必要な場合にはファイルを作成しながら実行してください。

  1. echo public_key_string >> ~/.ssh/authorized_keys

 

上記のコマンドでは、ローカルシステムで実行した cat ~/.ssh/id_rsa.pub コマンドの出力である public_key_string を使用してください。それは ssh-rsa AAAA…. で始まるはずです。

最後に、適切な権限が設定されていることを確認するために、~/.sshディレクトリとauthorized_keysファイルの権限を確保します。

  1. chmod -R go= ~/.ssh

 

このコマンドは、~/.ssh/ ディレクトリのすべての「グループ」および「その他」のパーミッションを再帰的に削除します。

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

  1. chown -R sammy:sammy ~/.ssh

 

このチュートリアルでは、ユーザーの名前をサミーとしていますが、上記のコマンドに適切なユーザー名を置き換えてください。

私たちは今、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鍵ベースの認証が設定されているか、より良いとされるが、sudo権限を持つ非rootアカウントに対してSSH鍵ベースの認証が設定されていることを確認してください。この手順はパスワードベースのログインを制限するため、管理者アクセスが引き続き可能であることを確保することが重要です。

リモートアカウントが管理者権限を持っていることを確認したら、SSHキーを使ってリモートサーバーにログインします。ルートユーザーとしてログインするか、sudo権限を持ったアカウントでログインします。そして、SSHデーモンの設定ファイルを開きます。

  1. sudo vi /etc/ssh/sshd_config

 

ファイルの中で、PasswordAuthenticationという指示を検索してください。この行は#ハッシュでコメントアウトされている場合があります。挿入モードにするためにiを押し、次にその行のコメントを外して値をnoに設定してください。これにより、アカウントパスワードを使用してSSH経由でログインする機能が無効化されます。

/etc/ssh/sshd_config を日本語で言い換えると、「/etc/ssh/sshd_config ファイル」となります。
...
PasswordAuthentication no
...

変更作業が終わったら、ESCキーを押して、変更内容をファイルに書き込んで終了するために、:wqと入力してください。これらの変更を実際に反映させるには、sshデーモンサービスを再起動する必要があります。

  1. sudo systemctl restart sshd

 

注意して、新しいターミナルウィンドウを開き、現在のセッションを終了する前にSSHサービスが正常に動作しているかテストしてください。

  1. ssh username@remote_host

 

SSHサービスが正常に動作していることを確認したら、安心して現在のサーバーセッションを終了することができます。

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

結論

あなたのサーバーには、SSHキーベースの認証が設定されており、アカウントのパスワードを入力せずにサインインすることができるようになっているはずです。

もしSSHについてもっと学びたい場合は、私たちのSSH Essentials Guideをご覧ください。

コメントを残す 0

Your email address will not be published. Required fields are marked *