SSH公開鍵認証の設定方法|パスワードログインを廃止する手順

目次
SSH公開鍵認証を設定して安全なサーバ運用を実現しよう
Linuxサーバを構築した直後は、SSHのパスワード認証を利用してログインすることが一般的です。
しかし実務環境では、パスワード認証のまま運用することはあまり推奨されません。
なぜなら、総当たり攻撃(ブルートフォース攻撃)や辞書攻撃の対象になりやすく、不正ログインのリスクが高くなるためです。
そこで利用されるのがSSH公開鍵認証です。
公開鍵認証を導入すると、秘密鍵を持つユーザーだけがログインできるようになり、セキュリティを大幅に向上させることができます。
本記事ではSSH公開鍵認証の設定方法から、最終的にパスワード認証を無効化するまでの流れを詳しく解説します。
公開鍵認証とは
公開鍵認証とは、公開鍵暗号方式を利用した認証方法です。
利用する鍵は次の2つです。
- 公開鍵(Public Key)
- 秘密鍵(Private Key)
公開鍵をサーバへ登録し、秘密鍵を利用者が保持します。
認証時には秘密鍵を利用して本人確認を行います。
パスワード認証との違い
| 項目 | 公開鍵認証 | パスワード認証 |
|---|---|---|
| 認証情報 | 秘密鍵 | パスワード |
| 総当たり攻撃 | 強い | 弱い |
| 自動化 | 可能 | 困難 |
| 実務利用 | 一般的 | 限定的 |
現在の企業環境では公開鍵認証が標準的な運用となっています。
事前準備
以下を準備します。
- SSH接続可能なLinuxサーバ
- 公開鍵を作成するクライアント
- ログイン可能なユーザー
今回はOpenSSH環境を前提に解説します。
鍵ペアを作成する
クライアント側でssh-keygenを実行します。
$ ssh-keygen -t ed25519現在はED25519形式が推奨されています。
作成後は以下のファイルが生成されます。
~/.ssh/id_ed25519
~/.ssh/id_ed25519.pub生成されたファイルを確認する
秘密鍵です。
id_ed25519
公開鍵です。
id_ed25519.pub
秘密鍵は絶対に他人へ渡してはいけません。
公開鍵をサーバへ登録する
最も簡単な方法はssh-copy-idです。
$ ssh-copy-id user@192.168.60.101パスワード認証後、自動的に公開鍵が登録されます。
実務でもよく利用される方法です。
ssh-copy-idが利用できない場合
公開鍵内容を確認します。
$ cat ~/.ssh/id_ed25519.pub表示された内容をコピーします。
サーバ側で以下へ追記します。
~/.ssh/authorized_keys手動でも設定可能です。
authorized_keysを確認する
サーバ側で確認します。
$ cat ~/.ssh/authorized_keys公開鍵が登録されていれば準備完了です。
パーミッションを設定する
SSHは権限チェックを厳しく行います。
推奨設定です。
$ chmod 700 ~/.ssh
$ chmod 600 ~/.ssh/authorized_keys
所有者も確認します。
$ chown -R user:user ~/.ssh設定ミスは認証失敗の原因になります。
公開鍵認証で接続する
接続を試します。
$ ssh user@192.168.60.101秘密鍵が標準位置にある場合、自動的に利用されます。
接続できれば公開鍵認証は成功です。
認証方法を確認する
詳細ログを確認します。
$ ssh -v user@192.168.60.101
成功時は以下のようなログが表示されます。
Authenticated using publickey公開鍵認証が利用されていることが分かります。
秘密鍵を明示的に指定する
複数の鍵を利用している場合です。
$ ssh -i ~/.ssh/id_ed25519 user@192.168.60.101指定した秘密鍵が利用されます。
パスワード認証を無効化する
公開鍵認証が正常に動作することを確認したら、パスワード認証を無効化します。
設定ファイルを編集します。
# vi /etc/ssh/sshd_config
以下を変更します。
PasswordAuthentication no
PubkeyAuthentication yesセキュリティ向上のため重要な設定です。
rootログインも制限する
さらに安全性を高める場合です。
PermitRootLogin no
または
PermitRootLogin prohibit-password企業環境ではよく利用されます。
設定を反映する
構文チェックを行います。
$ sshd -t
問題なければ再起動します。
# systemctl restart sshd設定が反映されます。
設定変更時の注意点
既存セッションを閉じる前に、新しいSSH接続を試しましょう。
確認せずに切断するとログインできなくなる可能性があります。
実務では非常に重要なポイントです。
よくあるトラブル
Permission denied (publickey)
主な原因です。
- 公開鍵未登録
- 権限設定ミス
- 秘密鍵違い
- ユーザー違い
まずはssh -vで確認しましょう。
公開鍵認証にならない
sshd_configを確認します。
PubkeyAuthentication yes
になっているか確認しましょう。
実務で推奨される構成
- ED25519利用
- パスフレーズ設定
- ssh-agent利用
- PasswordAuthentication no
- PermitRootLogin no
現在のLinuxサーバでは一般的な構成です。
まとめ
SSH公開鍵認証は、現在のLinuxサーバ運用において必須ともいえる認証方式です。
公開鍵をサーバへ登録し、秘密鍵を利用して認証することで、パスワード認証よりも高いセキュリティを実現できます。
公開鍵認証が正常に動作することを確認したら、パスワード認証を無効化することでさらに安全な環境を構築できます。
SSHサーバを運用する際は、まず公開鍵認証の導入から始めることをおすすめします。






