MENU

パスワードログインをやめてSSH鍵認証に切り替える手順

SSHでサーバーにログインする際、パスワード認証をそのまま使い続けているケースは少なくありません。しかしパスワード認証は、ブルートフォース攻撃(総当たり)やパスワードリスト攻撃の標的になりやすく、インターネットに公開されたサーバーでは継続的なリスクにさらされています。

この記事では、パスワード認証を廃止して鍵認証に切り替える一連の手順を解説します。鍵ペアの生成から公開鍵の登録、設定ファイルの変更、動作確認、よくあるつまずきまでを1本でまとめています。

目次

なぜパスワード認証をやめるべきか

インターネットに公開されたサーバーのSSH(22番ポート)には、常に不正ログイン試行が届いています。攻撃者は既知のパスワードパターンを機械的に試し続けるため、単純なパスワードはもちろん、ある程度複雑なパスワードでもいつかは突破されるリスクがあります。

鍵認証は「手元の秘密鍵とサーバー側の公開鍵がペアで一致する」ことで認証が成立する仕組みです。秘密鍵が手元にない限りログイン自体が不可能になるため、パスワード総当たり攻撃のリスクをほぼ排除できます。多くのLinuxディストリビューションの公式ドキュメントでも、鍵認証への移行が推奨されています。

鍵ペアを作成する

鍵ペアはSSH接続元(手元のPCや作業用サーバー)で生成します。接続先のサーバーでは行いません。

アルゴリズムの選択

現在よく使われるのはEd25519とRSAです。Ed25519は鍵長が短く高速で、現在の標準的な選択肢です。古いOpenSSH(バージョン6.4以前)との互換性が必要な場合はRSA(4096bit)を選択します。

# Ed25519(推奨)
ssh-keygen -t ed25519 -C "任意のコメント"

# RSA(古い環境との互換が必要な場合)
ssh-keygen -t rsa -b 4096 -C "任意のコメント"

コマンドを実行すると、保存先ファイル名とパスフレーズの入力を求められます。保存先はデフォルト(~/.ssh/id_ed25519など)のままEnterで問題ありません。パスフレーズを設定しておくと、万が一秘密鍵ファイルが流出した際の被害を抑えられます。

生成が完了すると、~/.ssh/に以下の2ファイルが作成されます。

  • id_ed25519:秘密鍵(絶対に外部に出さない)
  • id_ed25519.pub:公開鍵(サーバーへ登録するもの)

公開鍵をサーバーへ登録する

ssh-copy-idを使う方法

最も手軽な方法です。まだパスワード認証が有効な状態で実行するため、パスワードを求められます。

ssh-copy-id -i ~/.ssh/id_ed25519.pub ユーザー名@サーバーIPアドレス

このコマンドはサーバーの~/.ssh/authorized_keysに公開鍵を追記します。

手動で登録する方法

ssh-copy-idが使えない環境では、パスワードでサーバーにログインした後、次の手順で手動登録できます。

# サーバー側で実行
mkdir -p ~/.ssh
chmod 700 ~/.ssh
echo "公開鍵の内容(ssh-ed25519 AAAA...から始まる1行)" >> ~/.ssh/authorized_keys
chmod 600 ~/.ssh/authorized_keys

公開鍵の内容は、手元でcat ~/.ssh/id_ed25519.pubを実行して確認できます。ssh-ed25519 AAAA...から始まる1行を丸ごとコピーして貼り付けます。

パスワード認証を無効にする

この手順に進む前に、鍵認証でログインできることを必ず確認してください。パスワード認証を無効化した後にログインできなくなると、コンソールからの復旧作業が必要になります。

設定ファイルはほとんどのディストリビューションで/etc/ssh/sshd_configにあります。

sudo nano /etc/ssh/sshd_config

以下の項目を確認・変更します。コメントアウト(行頭の#)が残っている場合は削除してください。

PasswordAuthentication no
PubkeyAuthentication yes
AuthorizedKeysFile .ssh/authorized_keys

変更後、設定ファイルの構文を確認してからsshdを再起動します。

sudo sshd -t
sudo systemctl restart sshd

sshd -tでエラーが出た場合は設定を見直してください。エラーがなければsystemctl restart sshdを実行します。

切り替え後に動作を確認する

現在のSSHセッションは切断しないまま、別のターミナルやウィンドウから新しい接続を試みます。これにより、問題があっても既存セッションから設定を修正できます。

# 新しいターミナルで実行(-v オプションで詳細ログを表示)
ssh -v ユーザー名@サーバーIPアドレス

-vオプションを付けると認証の流れが表示され、どの鍵が使われているかがわかります。

パスワード認証が無効になっていることは次のコマンドで確認できます。

ssh -o PreferredAuthentications=password ユーザー名@サーバーIPアドレス

Permission denied (publickey)と表示されれば、パスワード認証が正しく無効化されています。

よくあるつまずきと対処法

鍵認証に失敗して「Permission denied (publickey)」が出る

原因の多くはファイルのパーミッション設定です。次のコマンドで確認できます。

ls -la ~/.ssh/

~/.ssh/は700、authorized_keysは600、ホームディレクトリ自体は755以下である必要があります。パーミッションが緩すぎると、SSHデーモンがセキュリティ上の理由でその鍵を無視します。サーバー側の認証ログは次のコマンドで確認できます。

sudo journalctl -u sshd --since "10 minutes ago"

設定変更が反映されない

Ubuntu 22.04以降など一部のディストリビューションでは、/etc/ssh/sshd_config.d/ディレクトリ内のファイルが上書き設定として機能します。50-cloud-init.confなどにPasswordAuthentication yesが残っている場合、メインの設定が上書きされることがあります。次のコマンドで/etc/ssh/以下のすべての設定ファイルを横断して確認できます。

grep -r PasswordAuthentication /etc/ssh/

競合する設定が見つかった場合は、そのファイルも修正してからsshdを再起動してください。

複数の端末から接続する場合

自宅PC・会社PC・作業サーバーなど複数の端末から接続する場合は、それぞれで鍵ペアを生成して、全員分の公開鍵をauthorized_keysに追記します。1行1鍵の形式で複数行書き込めます。端末ごとに鍵を分けておくと、特定の端末だけアクセスを取り消すときにauthorized_keysから該当行を削除するだけで対応できます。

「コマンドは打てる。次は”現場で通用する型”を最短で身につけたい」——そんなあなたへ。

ネットの断片的なTipsをコピペするだけでは、体系的な運用スキルはなかなか積み上がりません。リナックスマスター.JPの無料メルマガ「リナマガ」では、現場で実際に使うLinuxサーバー運用の考え方を、順を追って実務目線でお届けしています。いま登録された方には、安全なサーバー構築の「型」をまとめた『Linuxサーバー構築入門マニュアル(図解60P)』を完全無料でプレゼント中です。

>> 図解60P『Linux入門マニュアル』を無料で受け取る
(メルマガ登録は10秒・いつでも解除OK)

※ 「独学の時間がもったいない」「プロから現場の技術を最短で学びたい」という本気の方には、2日で実務レベルが身につく初心者向けハンズオンセミナーもご用意しています。

よかったらシェアしてね!
  • URLをコピーしました!
  • URLをコピーしました!

この記事を書いた人

目次