太長いので要約#
問題#
@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
@ 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。
簡単のために、ローカルマシンを SSH セッションのクライアントとサーバーとして使用します。したがって、公開鍵をユーザーの 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 が所有者のユーザー名とグループ名であることを示しています。最初の列は、所有者、所有者グループのメンバー、および他のすべてのユーザーが私たちのプライベートキーファイル /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 クライアントは、ストレージおよび使用するプライベートキーに対して厳格なルールを定義できるし、定義すべきです。なぜなら、それらはパスワードの等価物と見なされるからです。