CentOS 7 で SSH キーを設定する方法
はじめに
SSH (secure shell) は、サーバーを管理および通信するために使用される暗号化プロトコルです。 CentOS サーバーで作業する場合、SSH を介してサーバーに接続するターミナル セッションでほとんどの時間を過ごすことになります。
このガイドでは、バニラの CentOS 7 インストールの SSH キーの設定に焦点を当てます。 SSH キーは、サーバーにログインするための簡単で安全な方法を提供し、すべてのユーザーに推奨されます。
ステップ 1 – RSA キー ペアの作成
最初のステップは、クライアント マシン (通常は自分のコンピューター) でキー ペアを作成することです。
- ssh-keygen
デフォルトでは、 は 2048 ビット RSA キー ペアを作成しますが、これはほとんどの使用例に対して十分に安全です (より大きな 4096 ビット鍵を作成するにはオプションで -b 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)?
If you choose overwrite the key on disk, you will not be able to authenticate using the previous key anymore. これは元に戻すことができない破壊的なプロセスであるため、[はい] を選択する場合は十分に注意してください。
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 [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 鍵がコピーされるアカウントです。
- ssh-copy-id [email protected]_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
これは、ローカル コンピューターがリモート ホストを認識できないことを意味します。 これは、新しいホストに初めて接続したときに起こります。
次に、ユーティリティはローカル アカウントをスキャンして、以前に作成した 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
.
次の出力が表示されます。
OutputNumber 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"
コマンドの全文は次のようになります。
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
これは、ローカルコンピューターがリモートホストを認識していないことを意味します。 これは、新しいホストに初めて接続したときに起こります。
その後、リモートユーザーアカウントのパスワードを入力するよう求められます:
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
キーの内容は次のように表示されます:
Outputssh-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 サーバーを認証する
上記の手順のいずれかに成功した場合、リモート アカウントのパスワードなしでリモート ホストにログインすることができるようになるはずです。
基本的なプロセスは同じです:
- ssh [email protected]_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
を押して続行します。
秘密鍵のパスフレーズを指定しなかった場合、すぐにログインされます。 秘密鍵の作成時にパスフレーズを指定した場合は、今パスフレーズを入力するように求められます。 認証後、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 でログインする機能が無効になります:
...PasswordAuthentication no...
変更を終了したら、ESC
、:wq
を押して変更内容をファイルに書き出し、終了してください。 これらの変更を実際に実装するには、sshd
サービスを再起動する必要があります:
- sudo systemctl restart sshd.service
用心のため、このセッションを閉じる前に新しいターミナルウィンドウを開き、SSH サービスが正しく機能していることをテストします:
- ssh [email protected]_host
一旦、SSH サービスを確認したなら、現在のすべてのサーバーセッションを安全に閉じることができます。
CentOS サーバーの SSH デーモンは、現在 SSH 鍵にのみ応答します。 パスワードベースの認証は正常に無効になりました。
Conclusion
これで、サーバーで SSH キーベースの認証が設定され、アカウントのパスワードを提供せずにサインインできるようになりました。