Ubuntu 20.04にSSHキーをインストールする方法
導入
SSH(Secure Shell)は、サーバーの管理と通信に使用される暗号化プロトコルです。Ubuntuサーバーで作業する場合、ほとんどの時間をSSH経由でサーバーに接続したターミナルセッションで過ごすことになるでしょう。Ubuntu 20.04にSSHキーをインストールする方法については、引き続きお知らせします。.
この ヘルプこの記事では、Ubuntu 20.04インストールにおけるSSHキーの設定に焦点を当てます。SSHキーはサーバーへの安全なログイン方法を提供するため、すべてのユーザーに推奨されます。.
創造 デジタルオーシャン Droplet を使用すると、コンピューターの SSH キーを即座に追加して、プライベートかつ安全に接続できます。.
ステップ1 – キーペアを作成する
最初のステップは、クライアント デバイス (通常はコンピューター) にキー ペアを作成することです。
$ ssh-keygenデフォルトでは、ssh-keygen の最新バージョンは 3072 ビットの RSA キー ペアを生成します。これは、ほとんどの目的には十分なセキュリティです (オプションで -b 4096 フラグを渡して、より大きな 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)?ディスクにキーを上書きすることを選択した場合、以前のキーを使用して認証することはできなくなります。これは元に戻すことのできない破壊的なプロセスであるため、「(はい)」を選択する際は十分にご注意ください。.
次の通知が表示されます。
Output
Enter passphrase (empty for no passphrase):ここでオプションとして安全なパスフレーズを入力できます。パスフレーズの使用を強くお勧めします。パスフレーズはセキュリティをさらに強化し、不正なユーザーによるログインを防ぎます。セキュリティの詳細については、LinuxサーバーでSSHキーベースの認証を設定する方法に関するチュートリアルをご覧ください。.
次のような出力が表示されます。
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: SHA256:/hk7MJ5n5aiqdfTVUZr+2Qt+qCiS7BIm5Iv0dxrc3ks user@host The key's randomart image is: +---[RSA 3072]----+ | .| | + | | + | | . o . | |o S . o | | + o. .oo. .. .o| |o = oooooEo+ ...o| |.. o *o+=.*+o....| | =+=ooB=o.... | +----[SHA256]-----+
これで、認証に使用できる公開鍵と秘密鍵ができました。次のステップは、SSHキーベースの認証を使用してログインできるように、公開鍵をサーバーに配置することです。.
ステップ2 – 公開鍵をUbuntuサーバーにコピーする
Ubuntuホスト上で公開鍵をコピーする最も速い方法は、ssh-copy-idというツールを使用することです。シンプルなので、もし利用できるのであれば、この方法を強くお勧めします。クライアントマシンでssh-copy-idが利用できない場合は、このセクションに記載されている2つの代替方法(パスワードベースのSSH経由のコピー、または手動での鍵のコピー)のいずれかをご利用ください。.
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これは、ローカルコンピュータがリモートホストを認識していないことを意味します。新しいホストへの接続は初めてです。「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
[email protected]'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 '[email protected]'"
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"
次のメッセージが表示される場合があります。
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.pub キーの内容がリモートアカウントの authorized_keys ファイルの末尾にコピーされます。成功した場合は、手順 3 に進みます。.
公開鍵を手動でコピーする
サーバーへのパスワードベースの SSH アクセスがない場合は、上記のプロセスを手動で完了する必要があります。.
id_rsa.pub ファイルの内容をリモート マシンの ssh/authorized_keys./~ ファイルに手動で追加します。.
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== demo@test利用可能な任意の方法を使用してリモート ホストにアクセスします。.
リモートサーバー上のアカウントにアクセスしたら、ssh./~ ディレクトリが存在することを確認する必要があります。このコマンドは、必要に応じてディレクトリを作成します。既に存在する場合は何も行いません。
$ mkdir -p ~/.sshこれで、このディレクトリに authorized_keys ファイルを作成または変更できます。id_rsa.pub ファイルの内容を authorized_keys ファイルの末尾に追加し、必要に応じて次のコマンドでファイルを作成できます。
$ 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./~ ディレクトリのすべての「グループ」および「その他」の権限が再帰的に削除されます。.
ルート アカウントを使用してユーザー アカウントのキーを設定する場合は、ssh./~ ディレクトリの所有者がルートではなくユーザーであることも重要です。
chown -R sammy:sammy ~/.sshこのチュートリアルでは、ユーザーの名前は sammy ですが、上記のコマンドでは適切なユーザー名に置き換える必要があります。.
これで、Ubuntu Server でパスワードレス認証を実行できるようになりました。.
ステップ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
これは、ローカルコンピュータがリモートホストを認識していないことを意味します。「yes」と入力し、Enterキーを押して続行してください。.
秘密鍵のパスフレーズを指定していない場合は、すぐにログインします。秘密鍵の作成時にパスフレーズを指定した場合は、入力を求められます(セキュリティ上の理由から、入力したキーはターミナルセッションには表示されません)。認証後、Ubuntuサーバーに設定されたアカウントで新しいシェルセッションが開きます。.
キーベースの認証が成功した場合は、パスワード認証を無効にしてシステムをさらに安全に保護する方法を学習し続けます。.
ステップ4 – サーバーでパスワード認証を無効にする
パスワードなしでSSHを使用してアカウントにログインできた場合、アカウントでSSHキーベースの認証が正常に設定されています。ただし、パスワードベースの認証メカニズムは依然として有効になっているため、サーバーは依然としてブルートフォース攻撃に対して脆弱です。.
このセクションの手順を完了する前に、このサーバーのルートアカウントにSSHキーベースの認証を設定しているか、またはこのサーバーの非ルートアカウント(sudo権限を持つ)にSSHキーベースの認証を設定していることを確認してください。この手順によりパスワードベースのログインがロックされるため、管理者アクセスが引き続き可能であることを確認することが非常に重要です。.
リモートアカウントに管理者権限があることを確認したら、SSHキーを使用して、rootまたはsudo権限を持つアカウントでリモートサーバーにログインします。次に、SSHデーモンの設定ファイルを開きます。
$ sudo nano /etc/ssh/sshd_configファイル内で、「PasswordAuthentication」というディレクティブを探してください。この行は、行頭に「#」を付けてコメントアウトされている可能性があります。「#」を削除し、値を「no」に設定することで、この行のコメントを解除してください。これにより、アカウントのパスワードを使ったSSHログインが無効になります。
/etc/ssh/sshd_config
. . .
PasswordAuthentication no
. . .完了したら、Ctrl+Xを押してファイルを保存して閉じ、Yを押してファイルの保存を確認し、最後にENTERを押してnanoを終了します。これらの変更を有効にするには、sshdサービスを再起動する必要があります。
$ sudo systemctl restart ssh予防策として、現在のセッションを閉じる前に、新しいターミナル ウィンドウを開いて、SSH サービスが正常に動作していることをテストします。
# ssh username@remote_hostSSH サービスが正常に動作していることを確認したら、現在のすべてのサーバー セッションを安全に閉じることができます。.
Ubuntuサーバー上のSSHデーモンは、SSHキーベースの認証にのみ応答するようになりました。パスワードベースのログインは無効になっています。.
結果
ここで、サーバー上で SSH キーベースの認証を構成して、アカウント パスワードを入力せずにログインできるようにする必要があります。.









