CentOS 7 で SSH キーを設定する方法

はじめに

SSH (secure shell) は、サーバーを管理および通信するために使用される暗号化プロトコルです。 CentOS サーバーで作業する場合、SSH を介してサーバーに接続するターミナル セッションでほとんどの時間を過ごすことになります。

このガイドでは、バニラの CentOS 7 インストールの SSH キーの設定に焦点を当てます。 SSH キーは、サーバーにログインするための簡単で安全な方法を提供し、すべてのユーザーに推奨されます。

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

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

  • ssh-keygen

デフォルトでは、 は 2048 ビット RSA キー ペアを作成しますが、これはほとんどの使用例に対して十分に安全です (より大きな 4096 ビット鍵を作成するにはオプションで -b 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)?

If you choose overwrite the key on disk, you will not be able to authenticate using the previous key anymore. これは元に戻すことができない破壊的なプロセスであるため、[はい] を選択する場合は十分に注意してください。

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 [email protected]_hostThe key's randomart image is:+------+| ..o || E o= . || o. o || .. || ..S || o o. || =o.+. ||. =++.. ||o=++. |+-----------------+

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

Step 2 – CentOS サーバーに公開鍵をコピーする

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

Copying your Public Key Using ssh-copy-id

ssh-copy-id ツールは多くの OS に標準で含まれているので、ローカルシステムで使用できる場合があります。 この方法を使用するには、すでにサーバーへのパスワードベースの SSH アクセスを持っている必要があります。

このユーティリティを使用するには、接続したいリモートホストと、パスワード SSH アクセスを持っているユーザーアカウントを指定するだけでよいのです。 これは、公開 SSH 鍵がコピーされるアカウントです。

次のメッセージが表示されることがあります:

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

これは、ローカル コンピューターがリモート ホストを認識できないことを意味します。 これは、新しいホストに初めて接続したときに起こります。

次に、ユーティリティはローカル アカウントをスキャンして、以前に作成した 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 [email protected]'s password:

パスワードを入力し、ENTERを押します(セキュリティのため、入力内容は表示されません)。 ユーティリティは、提供されたパスワードを使用して、リモートホストのアカウントに接続します。 authorized_keys.

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

Output
Number of key(s) added: 1Now try logging into the machine, with: "ssh '[email protected]'"and check to make sure that only the key(s) you wanted were added.

この時点で、id_rsa.pub 鍵はリモート アカウントにアップロードされました。

Copying Public Key Using SSH

ssh-copy-id は利用できないが、サーバー上のアカウントにパスワードベースの SSH アクセスがある場合、従来の SSH 方法で鍵をアップロードできます。

これを行うには、cat コマンドを使ってローカル コンピュータ上の SSH 公開鍵のコンテンツを読み取り、SSH 接続を通してリモートサーバーにパイプを通します。

反対側では、~/.ssh ディレクトリが存在し、使用しているアカウントで正しいパーミッションがあることを確認できます。

次に、このディレクトリ内の authorized_keys というファイルにパイプした内容を出力できます。 ここでは、>> リダイレクト シンボルを使用して、コンテンツを上書きするのではなく、追加しています。

  • cat ~/.ssh/id_rsa.pub | ssh [email protected]_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

これは、ローカルコンピューターがリモートホストを認識していないことを意味します。 これは、新しいホストに初めて接続したときに起こります。

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

Output
[email protected]'s password:

パスワードを入力すると、id_rsa.pub キーの内容がリモートユーザーのアカウントの authorized_keys ファイルの末尾にコピーされます。

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

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

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

id_rsa.pub キーの内容を表示するには、ローカル コンピュータに次のように入力します:

  • 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== [email protected]

利用できる方法を使用してリモート ホストにアクセスします。

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

  • mkdir -p ~/.ssh

さて、このディレクトリ内に authorized_keys ファイルを作成または変更することができます。

  • echo public_key_string >> ~/.ssh/authorized_keys

上記のコマンドで、public_key_stringの部分をローカル・システムで実行したcat ~/.ssh/id_rsa.pubコマンドの出力に置き換えてください。

  • chmod -R go= ~/.ssh

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

  • chmod -R go= ~/.ssh

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

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

  • chown -R sammy:sammy ~/.ssh

このチュートリアルでは、ユーザーは sammy という名前ですが、上記のコマンドに適切なユーザー名を代入する必要があります。

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

Step 3 – SSH キーを使用して CentOS サーバーを認証する

上記の手順のいずれかに成功した場合、リモート アカウントのパスワードなしでリモート ホストにログインすることができるようになるはずです。

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

このホストに初めて接続する場合 (上記の最後の方法を使用した場合)、次のような表示が出ることがあります:

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を押して続行します。

秘密鍵のパスフレーズを指定しなかった場合、すぐにログインされます。 秘密鍵の作成時にパスフレーズを指定した場合は、今パスフレーズを入力するように求められます。 認証後、CentOS サーバーで設定したアカウントで新しいシェルセッションが開くはずです。

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

Step 4 – Disable Password Authentication on your Server

パスワードなしの SSH でアカウントにログインできた場合、SSH キーベースの認証をアカウントに正常に設定できたことになります。

このセクションの手順を完了する前に、このサーバーの root アカウントに SSH 鍵ベースの認証が構成されているか、できれば、このサーバーの sudo 権限の root でないアカウントに SSH 鍵ベースの認証が構成されていることを確認します。

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

  • sudo vi /etc/ssh/sshd_config

このファイルの中で、PasswordAuthentication というディレクティブを探します。 これはコメントアウトされている可能性があります。 iを押してテキストを挿入し、その行のコメントを解除して値を「no」に設定します。 これにより、アカウントパスワードを使用して SSH でログインする機能が無効になります:

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

変更を終了したら、ESC:wq を押して変更内容をファイルに書き出し、終了してください。 これらの変更を実際に実装するには、sshd サービスを再起動する必要があります:

  • sudo systemctl restart sshd.service

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

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

CentOS サーバーの SSH デーモンは、現在 SSH 鍵にのみ応答します。 パスワードベースの認証は正常に無効になりました。

Conclusion

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

コメントを残す

メールアドレスが公開されることはありません。