Windows 10 で SSH 秘密鍵を保護する方法

Windows 10 で SSH 秘密鍵を保護する方法

Windows 10 用の新しい SSH クライアントを使用していますが、秘密キーで接続しようとすると、次のエラーが発生します。

@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
@         WARNING: UNPROTECTED PRIVATE KEY FILE!          @
@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
Permissions for 'MyPair.pem' are too open. It is required that your
private key files are NOT accessible by others. This private key will
be ignored. Load key "MyPair.pem": bad permissions [email protected]:
Permission denied (publickey).

Linux の場合は、chmod 600ファイルのアクセス許可を設定するために実行する必要があることはわかっていますが、Windows 10 では何を使用すればよいのでしょうか?

答え1

キーは、対象のユーザーのみがアクセス可能で、他のアカウント、サービス、またはグループがアクセスすることはできません。

  • GUI:
    [ファイル]プロパティ安全高度な
    1. 所有者:変更 →プリンシパルを選択→ キーのユーザーを入力 → OK
    2. 権限エントリ:キーのユーザー以外をすべて削除
    3. キーのユーザーを設定するフルコントロールまだ設定されていない場合
      1. ユーザーを選択 → 変更 → フルコントロール → OK
        または
      2. 追加→プリンシパルを選択→ キーのユーザーを入力 → OK
    4. はい → はい

  • Cmd:
    ::# Set Key File Variable:
        Set Key="%UserProfile%\.ssh\id_rsa"
    
    ::# Remove Inheritance:
        Icacls %Key% /c /t /Inheritance:d
    
    ::# Set Ownership to Owner:
        Icacls %Key% /c /t /Grant %UserName%:F
    
    ::# Remove All Users, except for Owner:
        Icacls %Key%  /c /t /Remove Administrator BUILTIN\Administrators BUILTIN Everyone System Users
    
    ::# Verify:
        Icacls %Key%
    
    ::# Remove Variable:
        set "Key="
    
    

  • PowerShell:
    # Set Key File Variable:
      New-Variable -Name Key -Value "$env:UserProfile\.ssh\id_rsa"
    
    # Remove Inheritance:
      Icacls $Key /c /t /Inheritance:d
    
    # Set Ownership to Owner:
      Icacls $Key /c /t /Grant $env:UserName:F
    
    # Remove All Users, except for Owner:
      Icacls $Key  /c /t /Remove Administrator BUILTIN\Administrators BUILTIN Everyone System Users
    
    # Verify:
      Icacls $Key
    
    # Remove Variable:
      Remove-Variable -Name Key
    
    

  • WSL/Cygwin:
    # Set Variables:
      # Key File:
        key="/path/to/key"
    
      # User:
        user="$(echo $USER)"
    
    # Set Ownership to Owner: (assumes user's name is also user's group name)
      chown $user:$user $key
    
    # Set Access Rights
      chmod 0600 $key
    
    # Verify
      ls -l $key
    
    

答え2

Windows 10 GUI を使用すると、次のような追加の詳細が表示されます。

  1. pem ファイルを右クリックし、プロパティ、セキュリティを選択します。
  2. 所有者をキーのユーザー(つまりあなた)に設定する
  3. 権限エントリ、キーのユーザーを除くすべてのユーザー、グループ、サービスを削除します
  4. キーのユーザーを「フル コントロール」に設定します。 やり方は次のとおりです。
  5. 継承を無効にするポップアップが表示されたら、このファイルに対する明示的な権限に変換することを選択します。
  6. 追加し、プリンシパルを選択します。オブジェクト タイプはユーザー、オブジェクト名はキーの所有者のユーザー名です (たとえば、ホーム ディレクトリが c:\Users\ben フォルダーの場合は、ここに ben と入力します)。OK。
  7. そのユーザーにフルコントロールを与える
  8. その他全員(認証されたユーザー、システムなど)を削除します
  9. わかりました

継承を無効にする前に、キーのユーザーに所有者を設定することが重要です。

答え3

時間を節約するには、他の解決策よりもはるかに簡単です。ファイルをフォルダーなどのドライブ上の「安全な場所」に移動するだけです%userprofile%/.ssh

注: C: ドライブやユーザーのダウンロード フォルダーのどこでも動作するという人もいますが、私はそれをテストしていません。

関連情報