太長いので要約#
問題#
@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
@ WARNING: UNPROTECTED PRIVATE KEY FILE! @
@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
Permissions 0644 for '/home/chris/.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/chris/.ssh/id_rsa": bad permissions
ssh のプライベートキーを使用できず、上記の警告が表示されます。
解決方法#
chmod 0700 ~/.ssh/id_rsa
パスを自分のプライベートキーのパスに変更してください。
前提条件#
WSL を再インストールした後、Windows で使用している ssh キーを WSL に移動しようとしました。そのため、ファイルエクスプローラーで単純にコピーしました。しかし、この方法ではファイルのパーミッションが 0644 になり、つまり他のユーザーが閲覧でき、所有者のみが変更できるという不安全なパーミッションになります。このようなパーミッションのため、sshd はこのプライベートキーを使用しないようになり、VPS への ssh や Git の操作が正常に行えなくなります。解決策も非常に簡単です:パーミッションを変更するだけです。
完全な手順#
以下の内容は SSH Error “permissions are too open” for Private Key File から引用されたもので、元の著者は Hiks Gerganov です。私と ChatGPT が日本語に翻訳しました。
1. 概要#
鍵は Secure Shell (SSH) プロトコルの一部です。実際には、正しく使用すると、追加のセキュリティレベルを提供できます。
このチュートリアルでは、SSH キーのパーミッションの問題について説明します。まず、キーを生成し、特定のユーザーがアクセスできるようにそれらを設定します。次に、適切なキーのパーミッションについて説明します。最後に、キーのパーミッションを修正し、結果をテストする方法を説明します。
簡潔さとセキュリティのために、このチュートリアルでは、SSH の最新のバージョン 2(SSHv2)を実装した OpenSSH のみを考慮します。
このチュートリアルのコードは、Debian 11 (Bullseye) 上で GNU Bash 5.1.4 を使用してテストされました。ほとんどの POSIX 準拠の環境で動作するはずです。
2. キーの生成#
まず、デフォルトの設定でいくつかのキーを生成しましょう:
$ ssh-keygen
Generating public/private rsa key pair.
Enter file in which to save the key (/home/baeldung/.ssh/id_rsa):
Created directory '/home/baeldung/.ssh'.
Enter passphrase (empty for no passphrase):
Enter same passphrase again:
Your identification has been saved in /home/baeldung/.ssh/id_rsa
Your public key has been saved in /home/baeldung/.ssh/id_rsa.pub
The key fingerprint is:
[...]
この時点で、出力に示されているように、2 つのキーのペアが生成されます:
- 公開鍵:/home/baeldung/.ssh/id_rsa.pub
- プライベートキー:/home/baeldung/.ssh/id_rsa
重要なのは、これらはユーザー(baeldung)のホームディレクトリ(/home)のデフォルトの場所である $HOME に基づいています。
簡単のため、ローカルマシンをクライアントとサーバーとして使用します。したがって、公開鍵をユーザーの authorized_keys ファイルに追加します:
cat /home/baeldung/.ssh/id_rsa.pub >> /home/baeldung/.ssh/authorized_keys
さて、新しいキーを使用してみましょう。
3. プライベートキーのパーミッション#
キーの作成と設定が完了したら、localhost に接続するだけです:
$ ssh localhost
@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
@ WARNING: UNPROTECTED PRIVATE KEY FILE! @
@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
Permissions 0777 for '/root/.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 "/root/.ssh/id_rsa": bad permissions
[...]
この場合、私たちは私たちのプライベートキーに誤った パーミッション があるというエラーに遭遇します。具体的には、SSH クライアントは他の人がアクセスできるプライベートキーを使用することを許可しません。
私たちは ls コマンドを使用して現在のパーミッションを確認します:
$ ls -l /home/baeldung/.ssh/id_rsa
-rwxrwxrwx 1 baeldung baeldung 2590 Oct 10 06:56 /home/baeldung/.ssh/id_rsa
ここで、3 番目と 4 番目の列は baeldung が所有者のユーザー名とグループ名であることを示しています。1 番目の列は、所有者、所有者グループのメンバー、および他のすべてのユーザーが私たちのプライベートキーファイル /home/baeldung/.ssh/id_rsa に完全なアクセス権限を持っていることを示しています。つまり、モード が 0777 です。
適切なセキュリティを追求する場合、これは受け入れられません。
4. プライベートキーのパーミッションを修正する#
以前に見たエラーテキストの説明によると、私たちのプライベートキーファイルは「他の人がアクセスできない」ようにする必要があります。つまり、私たちのプライベートキーファイルには次の 2 つの極端なモードの間で設定する必要があります:
- 0400、最も厳格なモードで、所有者の読み取り権限のみを許可します
- 0700、最も緩いモードで、所有者に完全な権限を許可します
基本的に、非所有者ユーザーには何の権限も提供できず、所有者は少なくともこれらのファイルを読み取ることができる必要があります。この場合、最も厳格なアクセス権限を適用するために chmod コマンドを使用します:
$ chmod 0400 /home/baeldung/.ssh/id_rsa
$ ssh localhost
[...]
baeldung $
最後に、所有者を変更するために chown コマンドを使用した場合に何が起こるか見てみましょう:
$ chown user1:user1 /home/baeldung/.ssh/id_rsa
$ ls -l /home/baeldung/.ssh/id_rsa
-r-------- 1 user1 user1 2590 Oct 10 06:56 /home/baeldung/.ssh/id_rsa
この時点で、私たちは root である場合、SSH は操作を続行することを許可します。なぜなら、次の事実があるからです:
- root として、私たちはすべてのファイルにアクセス権を持っています
- SSH クライアントにとって、ファイルのパーミッションは実際には正確です(0400)
実際には、root としては、-l オプションを使用するか、user@ 構文で正しいユーザーを指定し、-i フラグでキーを指定するだけで設定が完了します。
5. 公開鍵のパーミッション#
プライベートキーの主な問題の付随的な説明として、公開鍵もこれらのパーミッション要件が適用されるかどうか疑問に思うかもしれません。実際には、推奨はあるものの一般的な規定はありません。
ほとんどの場合、ローカルコピーのキーを第三者からの変更から保護することが最善です。基本的に、推奨されるモードは 2 つの極端なモードの間にあります:
- 0400、以前と同様に、所有者のみにキーの読み取りを許可します
- 0744、所有者が変更せずに操作できるようにしますが、外部ユーザーからの変更を少なくとも防ぎます
いずれにせよ、公開鍵がリモートマシンの authorized_keys ファイルにある場合、実際にはログインには必要ありません - プライベートキーのみが必要です。
6. まとめ#
この記事では、SSH キーのパーミッションの問題、それが引き起こす可能性のある問題、およびそれらを修正する方法について説明しました。
要するに、SSH クライアントは、ストレージと使用するためのプライベートキーに対して厳格なルールを定義できるし、定義すべきです。なぜなら、それらはパスワードと同等のものと見なされるからです。