Ubuntu16.04でSSHキーを設定する方法

はじめに

SSH、またはsecure shellは、サーバーの管理および通信に使用される暗号化プロトコルです。 Ubuntuサーバーで作業する場合、SSHを介してサーバーに接続されたターミナルセッションでほとんどの時間を過ごす可能性があります。このガイドでは、vanilla Ubuntu16.04インストール用のSSHキーの設定に焦点を当てます。 SSHキーは、サーバーへの簡単で安全なログイン方法を提供し、すべてのユーザーに推奨されます。

ステップ1—RSAキーペアを作成します

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

  • ssh-keygen

デフォルトでssh-keygenは、ほとんどのユースケースに十分に安全な2048ビットRSAキーペアを作成します(必要に応じてssh-keygen-b 4096より大きな4096ビットキーを作成するフラグ)。

コマンドを入力すると、次の出力が表示されます:キーペアをホームディレクトリの.ssh/

Output
Generating public/private rsa key pair.Enter file in which to save the key (/your_home/.ssh/id_rsa):

キーペアをホームディレクトリの.ssh/サブディレクトリに保存するか、代替パスを指定します。

以前にSSHキーペアを生成していた場合、次のプロンプトが表示されることがあります。

Output
/home/your_home/.ssh/id_rsa already exists.Overwrite (y/n)?

ディスク上のキーを上書きすることを選択した場合、前のキーを使用して認証することはできなくなります。 これは元に戻すことができない破壊的なプロセスであるため、はいを選択するときは非常に注意してくださ

次のプロンプトが表示されます:

Output
Enter passphrase (empty for no passphrase):

ここでは、必要に応じて安全なパスフレーズを入力することができます。 パスフレーズは、許可されていないユーザーがログインするのを防ぐために、追加のセキュリティ層を追加します。 セキュリティの詳細については、LinuxサーバーでSSHキーベースの認証を設定する方法についてのチュートリアルを参照してください。次に、次の出力が表示されます。

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

これで、認証に使用できる公開鍵と秘密鍵が得られました。 次のステップは、SSHキーベースの認証を使用してログインできるように、サーバーに公開キーを配置することです。Ubuntuホストに公開鍵をコピーする最も簡単な方法は、ssh-copy-idssh-copy-idを使用できない場合は、このセクションで提供されている2つの代替方法のいずれかを使用できます(パスワー

ssh-copy-idを使用した公開鍵のコピー

ssh-copy-idツールは、多くのオペレーティングシステムでデフォルトで含まれているため、ローカルシステム この方法を機能させるには、サーバーへのパスワードベースのSSHアクセスが既に必要です。

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

構文は次のとおりです:

  • 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

これは、ローカルコンピュータがリモートホストを認識しないことを意味します。 これは、新しいホストに初めて接続するときに発生します。 「はい」と入力し、ENTERid_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~/.ssh/id_rsa.pub~/.ssh

次の出力が表示されます:この時点で、あなたのid_rsa.pubキーがリモートアカウントにアップロードされました。 ステップ3に進むことができます。

SSHを使用して公開鍵をコピーする

ssh-copy-idを使用できないが、サーバー上のアカウントへのパスワードベースのSSHアクセスがある場合は、従来のSSH方式を使用して鍵をアップロードすることができます。これを行うには、catコマンドを使用してローカルコンピュータ上の公開SSHキーの内容を読み取り、リモートサーバーへのSSH接続を介して配管します。 反対側では、~/.sshauthorized_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"

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

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

これは、ローカルコンピュータがリモートホストを認識しないことを意味します。 これは、新しいホストに初めて接続するときに発生します。 「はい」と入力し、ENTERを押して続行します。

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

Output
[email protected]'s password:

パスワードを入力すると、id_rsa.pubauthorized_keysファイルの最後にコピーされます。 これが成功した場合は、手順3に進みます。

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

サーバーへのパスワードベースのSSHアクセスが利用できない場合は、上記のプロセスを手動で完了する必要があります。リモートマシン上の~/.ssh/authorized_keysid_rsa.pubファイルの内容を手動で追加します。

あなたのid_rsa.pubキーの内容を表示するには、ローカルコンピュータにこれを入力します。

  • cat ~/.ssh/id_rsa.pub

キーの内容が表示されます。:p>

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== demo@test

利用可能ないずれかの方法を使用してリモートホストにアクセスします。 リモートサーバー上のアカウントにアクセスしたら、~/.sshディレクトリが存在することを確認する必要があります。 このコマンドは、必要に応じてディレクトリを作成するか、すでに存在する場合は何もしません。

  • mkdir -p ~/.ssh

このディレクトリ内にauthorized_keysid_rsa.pubauthorized_keysファイルの最後に追加し、必要に応じて作成することができます。

  • echo public_key_string >> ~/.ssh/authorized_keys

上記のコマンドでは、public_key_stringpublic_key_stringauthorized_keyscat ~/.ssh/id_rsa.pubローカルシステムで実行したコマンド。 それはssh-rsa AAAA...~/.sshauthorized_keys~/.ssh/ディレクトリのすべての”group”および”other”権限が再帰的に削除されます。

ユーザーアカウントのキーを設定するためにroot~/.sshroot:

  • chown -R sammy:sammy ~/.ssh

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

Ubuntuサーバーでパスワードのない認証を試みることができます。ステップ3-SSHキーを使用してUbuntuサーバーに認証する

上記のいずれかの手順を正常に完了した場合は、リモートアカウントのパスワードなしでリモートホス基本的なプロセスは同じです:

  • 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

これは、ローカルコンピュータがリモートホストを認識しないことを意味します。 “はい”と入力し、ENTERを押して続行します。

秘密鍵のパスフレーズを指定しなかった場合は、すぐにログインします。 キーを作成したときに秘密キーのパスフレーズを指定した場合は、ここで入力するように求められます(セキュリティのためにキーストロークはターミナルセ 認証後、Ubuntuサーバーで構成されたアカウントで新しいシェルセッションが開きます。

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

ステップ4—サーバーでパスワード認証を無効にする

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

このセクションの手順を完了する前に、このサーバーのrootアカウントに対してSSH-key-based認証が構成されているか、できれば、sudo権限を持つこのサーバーのroot以外のアカウントに対してSSH-key-based認証が構成されていることを確認してください。 この手順では、パスワードベースのログインがロックダウンされるため、管理アクセスを確実に取得できるようにすることが重要です。リモートアカウントに管理者権限があることを確認したら、ROOTとして、またはsudo権限を持つアカウントでSSHキーを使用してリモー 次に、SSHデーモンの設定ファイルを開きます。

  • sudo nano /etc/ssh/sshd_config

ファイル内で、PasswordAuthenticationというディレクティブを検索します。 これはコメントアウトされる可能性があります。 行のコメントを解除し、値を”no”に設定します。 これにより、アカウントパスワードを使用してSSH経由でログインする機能が無効になります:/etc/ssh/sshd_config

...PasswordAuthentication no...

CTRLXYENTERnanoを終了します。 これらの変更を実際に実装するには、sshdサービスを再起動する必要があります。

  • sudo systemctl restart ssh

予防措置として、新しいターミナルウィ:SSHサービスを確認したら、現在のすべてのサーバーセッションを安全に閉じることができます。 Ubuntuサーバー上のSSHデーモンはSSHキーにのみ応答するようになりました。 パスワードベースの認証が正常に無効化されました。

結論

これで、アカウントパスワードを指定せずにサインインできるように、サーバー上でSSHキーベースの認証が構成されている必要があります。SSHの操作について詳しく知りたい場合は、SSH Essentialsガイドをご覧ください。



コメントを残す

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