ConoHaVPS

【30分で完了】SSH公開鍵認証の設定方法を解説

SANA

こんにちは。今回はUbuntu 22.04に対して公開鍵認証を使ってSSH接続したいと考えている方々に向けた記事となります。丁寧に説明していますので最後まで見てください。

他にもSSHに関する記事を執筆していますので、ご一読いただけると幸いです。

あわせて読みたい
【30分で完了】ConoHa VPSへSSH接続する方法を解説
【30分で完了】ConoHa VPSへSSH接続する方法を解説
あわせて読みたい
【30分で完了】SSH接続のポート番号を変更する
【30分で完了】SSH接続のポート番号を変更する

さて、今回の前提を以下に書きます。

<接続先VPSサーバ情報>
サーバ:ConoHa VPS
OS:Ubuntu22.04
以下のパッケージインストール済み
・OpenSSH:公開鍵認証を用いたSSHやSCP転送にも対応している。

それでは進めていきましょう。

そもそも公開鍵認証を導入する理由は?

理由としてはパスワードを考えて、設定して、SSHする度に入力するという行為をやめたい訳です。

覚えられるぐらいのパスワードですと、総当たり攻撃をされた際に突破されてしまう可能性があります。公開鍵認証方式において秘密鍵は推測困難と知られているのに加えて、ユーザーのデバイスにのみ保存されます。そのため、パスワードを推測されたり盗まれるリスクが非常に低いのが特徴です。

公開鍵認証方式の設定

自身の端末からUbuntuに公開鍵認証でSSH接続することを考えます。公開鍵認証を実現するためには最終的に公開鍵&秘密鍵のペアが以下のようになってる必要があります。

下記のゴールを覚えておきましょう。

・SSH接続元(自身の端末)
→ ~/.ssh/下に秘密鍵がある
・SSH接続先(Ubuntu)
→ ~/.ssh/下に公開鍵(authorized_keys)がある
※各フォルダ/ファイルに適切なパーミッションが設定されている

公開鍵&秘密鍵ペアを生成する

まずは、鍵を生成しましょう。公開鍵と秘密鍵はペアで生成されます。

暗号化する方式は様々ですが、近年では最強の暗号化方式と呼ばれる「ed25519」を使って鍵を生成しましょう。

自身の端末の~/.sshに移動して、以下コマンドを打ちましょう。

以下の質問がされますので答えましょう。
パスフレーズは空でもダイジョブです。設定する場合は覚えておかないと後悔しますので注意。

Enter file in which to save the key:特に理由なければそのままエンター
Enter passphrase (empty for no passphrase):自分で設定するパスフレーズ
Enter same passphrase again:↑上記をもう一度入力

「id_ed25519」と「id_ed25519.pub」ができてれば成功です。.pubの方が公開鍵となります。

今の状態はこうなってる状態です。

・SSH接続元(自身の端末)
→ ~/.ssh/下に公開鍵と秘密鍵がある
・SSH接続先(Ubuntu)
→ ~/.ssh/下に鍵なし
※各フォルダ/ファイルに適切なパーミッションが設定されていない

SSH接続元(自身の端末)で生成した公開鍵をSSH接続先(Ubuntu)へ転送する必要があります。

それでは次を進めていきましょう。

秘密鍵をSSH接続先へ転送する

便利なコマンドがあるので紹介します。以下のコマンドにより、SSH接続元(自身の端末)の公開鍵をSSH接続先(Ubuntu)の~/.ssh/下に「authorized_keys」とリネームして配置しれくれます。

SSH接続元(自身の端末)の.ssh下に移動して以下のコマンドを打ってみましょう。

コマンドを打ったら、SSH接続先(Ubuntu)の~/.ssh/下に移動して

をして「authorized_keys」があればOKです。

今の状態はこうなってる状態です。

・SSH接続元(自身の端末)
→ ~/.ssh/下に秘密鍵がある
・SSH接続先(Ubuntu)
→ ~/.ssh/下に公開鍵(authorized_keys)がある
※各フォルダ/ファイルに適切なパーミッションが設定されていない

最後にパーミッションの設定をします。

各フォルダ及びファイルにパーミッションを与える

公開鍵認証がうまく行かない大半の理由は「パーミッション」の問題です。認証のプロセスの中で各々のファイルへアクセスするのですが、適切なパーミッションが与えられてないと「Permission denied」等のエラーが発生します。その他にも「権限ガバガバすぎるからこんなファイル信用できないからダメ!」的なエラーもあります。つまり、パーミッションが厳しすぎてもダメですし、緩すぎてもダメな訳です。

以下にコマンドをまとめました。

SSH接続元(自身の端末)

chmod 755 home
chmod 755 /home/ユーザー名
chmod 700 /home/ユーザー名/.ssh
chmod 600 /home/ユーザー名/.ssh/秘密鍵ファイル名

SSH接続先(Ubuntu)

chmod 755 home
chmod 755 /home/ユーザー名
chmod 700 /home/ユーザー名/.ssh
chmod 600 /home/ユーザー名/.ssh/authorized_keys

これでパーミッションの設定が完了しました。

・SSH接続元(自身の端末)
→ ~/.ssh/下に秘密鍵がある
・SSH接続先(Ubuntu)
→ ~/.ssh/下に公開鍵(authorized_keys)がある
※各フォルダ/ファイルに適切なパーミッションが設定されている

sshd_configの変更する

最後にSSH接続する際に公開鍵認証方式を採用する設定をしましょう。

以下のように設定ファイルを変更してください。

sshd_config設定

PubkeyAuthentication yes

変更を保存したらSSHサーバのサービス再起動をします。

「Active:active(running)」になってればOKです。

公開鍵認証を使ってSSH接続してみよう!

SSH接続元(自身の端末)から以下のコマンドを打ってみましょう。

無事接続できれば完了です。

パスワード認証を無効化

秘密鍵でSSH接続できるようになったので、パスワード認証を無効化しましょう。以下の2ファイルの「PasswordAuthentication」をnoにします。

sshd_config設定

PasswordAuthentication no
※2箇所あるので注意

50-cloud-init.conf設定

PasswordAuthentication no

まとめ

今回はUbuntu 22.04に対して公開鍵認証を使ってSSH接続する方法を紹介しました。個人でサーバを管理している人にとって、しっかりとしたセキュリティ対策を行うことは非常に重要です。この方法を用いることで、パスワードに依存した認証よりもはるかに強固なセキュリティを確立することが可能になります。

ABOUT ME
さな夫
さな夫
JTC SIer中間平社員
東京生まれ。30代。大学院修了後に今のSIer会社へ就職。普段はアプリ開発の設計を担当。奥さんと子供2人とほのぼのとした日常を過ごしながら技術系のブログを執筆中。
記事URLをコピーしました