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

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サーバを運用する際は、まず公開鍵認証の導入から始めることをおすすめします。