SSHエラー「WARNING: UNPROTECTED PRIVATE KEY FILE!」の解決方法

初級🐧 Linux2026-07-25| Linux (Ubuntu, Debian, CentOS, Fedora)、macOS、および WSL (Windows Subsystem for Linux)

Error Message

@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@ @ WARNING: UNPROTECTED PRIVATE KEY FILE! @ @@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@ Permissions 0644 for '/home/user/.ssh/id_rsa' are too open. It is required that your private key files are NOT accessible by others. This private key will be ignored. Load key "/home/user/.ssh/id_rsa": bad permissions user@example.com: Permission denied (publickey).
#ssh#linux-security#chmod#sysadmin#devops

問題の発生リモートサーバーにログインしようとした際、パスワード入力プロンプトの代わりに大量の警告テキストが表示されることがあります。これは、秘密鍵が「公開されすぎている(権限が緩すぎる)」ために SSH が接続を拒否している状態です。資格情報を保護するため、OpenSSH クライアントは該当の鍵を無視し、接続をブロックします。

Permissions 0644 for '/home/user/.ssh/id_rsa' are too open.

原因SSH はセキュリティに対して非常に厳格です。秘密鍵は、自宅の物理的なマスターキーのようなものです。ローカルマシンの他のユーザーがそのファイルを読み取れる設定になっている場合、SSH はその鍵が侵害された(安全ではない)とみなします。

上記のエラーでは、パーミッションが 0644 に設定されています。これらの数字の意味は以下の通りです:

  • 6 (所有者): ファイルの読み取りと書き込みが可能。- 4 (グループ): 同じグループ内の他のユーザーが読み取り可能。- 4 (その他): システム上の他の誰でも読み取り可能。AWS から .pem ファイルをダウンロードしたり、Windows のパーティションから Linux に鍵を移動したりすると、システムはデフォルトでこのような広範なパーミッションを設定することがよくあります。SSH は、あなただけがアクセス権を持っていることを要求します。

解決策### 1. 現在のパーミッションを確認するまず、鍵の現在の状態を確認します。ターミナルで以下のコマンドを実行してください:

ls -l ~/.ssh/id_rsa

もし -rw-r--r-- と表示された場合、それは誰でも読み取り可能であることを意味します。権限を制限する必要があります。

2. 鍵ファイルの権限を制限する秘密鍵の標準的なパーミッションは 600 です。これにより、あなたにはフルアクセス権が与えられ、他の全員はアクセスできなくなります。以下のコマンドを実行してください:

chmod 600 ~/.ssh/id_rsa

鍵の名前が deploy-key.pem など異なる場合は、そのファイル名を使用してください。設定後、ls -l を実行すると -rw------- と表示されるはずです。

3. .ssh ディレクトリを保護するファイル自体に問題がなくても、それを含むフォルダの権限が緩すぎる場合があります。~/.ssh ディレクトリは 700(所有者のみ読み取り/書き込み/実行可能)に設定されている必要があります。以下のコマンドで修正します:

chmod 700 ~/.ssh

4. 接続をテストする再度接続を試みます:

ssh -i ~/.ssh/id_rsa user@192.168.1.100

警告が表示されなくなり、パスフレーズの入力が求められるか、すぐにログインできるようになります。

特殊なケース:Windows Subsystem for Linux (WSL)WSL を使用していますか?鍵が Windows のドライブ(/mnt/c/ など)に保存されている場合、chmod コマンドがエラーを出さずに失敗することがあります。これは、Windows のドライブが Linux のパーミッションと完全に対応していないファイルシステム (NTFS) を使用しているためです。

最も簡単な解決策は、鍵を Linux 側のホームディレクトリにコピーすることです:

cp /mnt/c/Users/YourName/.ssh/id_rsa ~/.ssh/id_rsa
chmod 600 ~/.ssh/id_rsa

ベストプラクティス- 777は絶対に使用しない: エラーを解決するために「すべての権限」を与えたくなりますが、SSH は 777 パーミッションの鍵を常に拒否します。これは重大なセキュリティホールになります。- SSH-Agent を活用する: パスフレーズを何度も入力するのが面倒な場合は、ssh-add ~/.ssh/id_rsa を使用して、セッション中、復号化された鍵をメモリに保存してください。- ツールで確認する: 8進数コード(644 や 700 など)が分かりにくい場合は、Unix Permissions Calculator を使用して、誰がファイルにアクセスできるかを視覚的に確認してください。

Related Error Notes