Start typing to search across invoices, services, domains, tickets, and more...
SSH 鍵はパスワードと違ってブルートフォース攻撃でほぼ破られず、パスワードログインの無効化と組み合わせることでサーバーの安全性が大きく向上し、パスワード入力なしでログインできるようになります。本記事では Linux で SSH 鍵認証を設定する方法として、手元で ssh-keygen により ed25519 鍵を作成し、公開鍵をサーバーへ登録、authorized_keys の権限を整え、動作確認後にパスワードログインを無効化するまでを解説します。サーバー側は Debian/Ubuntu と CentOS/Rocky/AlmaLinux、手元は Windows・macOS・Linux に対応します。
サーバーではなく手元のパソコンで実行します。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
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"
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
現在のセッションは閉じずに、手元で新しいターミナルを開いてテストします。サーバーのパスワードを聞かれなければ(パスフレーズを設定した場合はそれのみ)、鍵ログインは有効です。
# From your computer: should log in without asking for the server password
ssh -i ~/.ssh/id_ed25519 [email protected]
鍵ログインを確認できたら、/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
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、実行したコマンド、エラー画面のスクリーンショットを添えていただくと、より迅速に対応できます。