ESC

Start typing to search across invoices, services, domains, tickets, and more...

Search... Ctrl+K
Linuxサーバー

Linux で SSH 鍵認証を設定しパスワードログインを無効化する方法(ed25519)

6 ステップ 8 分で読めます 1057 回閲覧 49
目次

SSH 鍵はパスワードと違ってブルートフォース攻撃でほぼ破られず、パスワードログインの無効化と組み合わせることでサーバーの安全性が大きく向上し、パスワード入力なしでログインできるようになります。本記事では Linux で SSH 鍵認証を設定する方法として、手元で ssh-keygen により ed25519 鍵を作成し、公開鍵をサーバーへ登録、authorized_keys の権限を整え、動作確認後にパスワードログインを無効化するまでを解説します。サーバー側は Debian/Ubuntu と CentOS/Rocky/AlmaLinux、手元は Windows・macOS・Linux に対応します。

ステップ1:ssh-keygen で ed25519 鍵を作成する

サーバーではなく手元のパソコンで実行します。ed25519 は鍵が短く安全かつ高速で、現在推奨されるアルゴリズムです。パスフレーズを設定すると、秘密鍵ファイルが漏れてもそのままでは使えません。不要なら Enter で省略できます。

# Works in macOS/Linux terminals and Windows PowerShell
ssh-keygen -t ed25519 -C "me@my-laptop"

# Result:
#   ~/.ssh/id_ed25519       private key - never share it
#   ~/.ssh/id_ed25519.pub   public key  - goes to the server
秘密鍵 id_ed25519 はサーバーの鍵そのものです。誰にも渡さず、サーバーやクラウドストレージ、コードリポジトリにもアップロードしないでください。紛失すると鍵でログインできなくなるため、安全な場所にバックアップしましょう。

ステップ2:ssh-copy-id で公開鍵をサーバーに登録する

macOS と Linux では ssh-copy-id を使うと、サーバーの ~/.ssh/authorized_keys への追記と権限設定を自動で行ってくれます。実行時にサーバーのパスワードを一度入力します。

# macOS / Linux
ssh-copy-id -i ~/.ssh/id_ed25519.pub [email protected]
ssh-copy-id -i ~/.ssh/id_ed25519.pub -p 2222 [email protected]   # custom port

Windows 標準の OpenSSH には ssh-copy-id がありません。PowerShell では次のコマンドで同じことができます。

# Windows PowerShell (no ssh-copy-id)
type $env:USERPROFILE\.ssh\id_ed25519.pub | ssh [email protected] "mkdir -p ~/.ssh && cat >> ~/.ssh/authorized_keys"

ステップ3:authorized_keys の権限を確認する

sshd は権限に厳格で、~/.ssh や authorized_keys の権限が緩いと鍵が無視されます。手動で公開鍵を登録した場合はサーバーで以下を実行します。SELinux が有効な環境ではコンテキストも復元してください。

chmod 700 ~/.ssh
chmod 600 ~/.ssh/authorized_keys
chown -R root:root ~/.ssh

# CentOS / Rocky / AlmaLinux with SELinux: restore the correct context
restorecon -Rv ~/.ssh

ステップ4:SSH 鍵ログインをテストする

現在のセッションは閉じずに、手元で新しいターミナルを開いてテストします。サーバーのパスワードを聞かれなければ(パスフレーズを設定した場合はそれのみ)、鍵ログインは有効です。

# From your computer: should log in without asking for the server password
ssh -i ~/.ssh/id_ed25519 [email protected]

ステップ5:SSH のパスワードログインを無効化する

鍵ログインを確認できたら、/etc/ssh/sshd_config でパスワード認証をオフにします。PermitRootLogin prohibit-password は root を鍵ログインのみに制限します。多くのクラウドイメージでは /etc/ssh/sshd_config.d/ にパスワードログインを有効にするファイル(例:50-cloud-init.conf)があるため、こちらも修正しないとメインの設定が反映されません。

# /etc/ssh/sshd_config
PubkeyAuthentication yes
PasswordAuthentication no
KbdInteractiveAuthentication no
PermitRootLogin prohibit-password

# Drop-in files can override the main file - check them
grep -rn 'PasswordAuthentication' /etc/ssh/sshd_config.d/ 2>/dev/null

ステップ6:設定を検証して sshd を再起動する

sshd -t で構文を確認し、sshd -T で実際に有効な値を表示します。passwordauthentication が no になっていれば再起動します。その後、新しいウィンドウで鍵ログインを再確認し、パスワードでのログインが拒否されることも確かめましょう。

sshd -t
sshd -T | grep -Ei 'passwordauthentication|pubkeyauthentication|permitrootlogin'

systemctl restart sshd    # CentOS / Rocky / AlmaLinux / Debian
systemctl restart ssh     # Ubuntu

よくある質問

設定後もパスワードを求められます。

多くは権限の問題か公開鍵の貼り付けミスです。authorized_keys で 1 つの鍵が 1 行に収まっているか、権限が 700/600 かを確認し、ssh -v でクライアントが正しい鍵を提示しているか調べてください。

複数のパソコンから同じサーバーにログインするには?

パソコンごとに鍵を作成し、それぞれの公開鍵を authorized_keys に 1 行ずつ追記します。紛失したパソコンがあれば、その行を削除するだけです。

パスワードを無効化した後に秘密鍵を紛失しました。

クライアントエリアの VNC コンソールから root パスワードでログインし(コンソールは SSH 設定の影響を受けません)、新しい公開鍵を登録します。root パスワードも不明な場合はチケットでご相談ください。

上記の手順で解決しない場合は、サポートチケットを送信して IMIDC の 24 時間 365 日テクニカルサポートへお問い合わせください。サーバー IP、OS、実行したコマンド、エラー画面のスクリーンショットを添えていただくと、より迅速に対応できます。

この回答はお役に立ちましたか?

関連チュートリアル