Windows SSH:「秘密鍵」のアクセス権が開いています


101

テストのために、Windows 7にOpenSSH 7.6をインストールしました。このウィンドウからAWS EC2ボックスの1つにアクセスしようとするまで、SSHクライアントとサーバーは正常に動作します。

秘密鍵ファイルの許可を変更する必要があるようです。これは、unix / linuxでchmodコマンドを使用して簡単に実行できます。

窓はどうですか?

private-key.ppmはAWSから直接コピーされ、許可も推測されます。

C:\>ssh -V
OpenSSH_7.6p1, LibreSSL 2.5.3

C:\>ver

Microsoft Windows [Version 6.1.7601]

C:\>


C:\>ssh ubuntu@192.168.0.1 -i private-key.ppk
@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
@         WARNING: UNPROTECTED PRIVATE KEY FILE!          @
@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
Permissions for 'private-key.ppk' are too open.
It is required that your private key files are NOT accessible by others.
This private key will be ignored.
Load key "private-key.ppk": bad permissions
ubuntu@192.168.0.1: Permission denied (publickey).

C:\>
C:\>
C:\>ssh ubuntu@192.168.0.1 -i private-key.ppm
Warning: Identity file private-key.ppm not accessible: No such file or directory.
ubuntu@192.168.0.1: Permission denied (publickey).

C:\>

ACLを変更しようとしましたか?
イグナシオバスケス-エイブラムス

1
秘密鍵は実際にはC:\ルートパスにありますか?通常、C:\の内容には誰でもアクセスできるため、なぜ文句を言うのかがわかります。ユーザーだけがアクセスできるフォルダー(C:\ Users \ username \ desktopなど)に移動して、そのメッセージが引き続き表示されるかどうかを確認しましたか?
ダリウス

@ダリウス、そうです。unix / linuxからWindowsにファイルをコピーすると、パーミッションもコピーされます。これを変更する必要がありますが、Windowsでの実行方法がわかりません。これは、chmodコマンドを使用してunix / linuxで簡単に実行できます。
サブリナ

@ IgnacioVazquez-Abrams、ACL?どのようなACLですか?
サブリナ

1
@Sabrina icaclsコマンドを使用してアクセス許可を変更するか、単に秘密キーを右クリックして[プロパティ]を選択し、[セキュリティ]タブで確認します。そして、あなた/秘密鍵にアクセスできるはずの人だけがアクセスできるようにしてください。「ユーザー」が読み取りアクセス権を持っている場合-システムへのアクセス権を持つすべてのユーザーがその秘密キーを読み取ることができることを意味します。
ダリウス

回答:


118

Windowsエクスプローラーでファイルを見つけ、右クリックして[プロパティ]を選択します。[セキュリティ]タブに移動し、[詳細設定]をクリックします。

所有者をあなたに変更し、継承を無効にし、すべての権限を削除します。次に、自分に「フルコントロール」を付与し、権限を保存します。これで、SSHは、ファイルのアクセス許可がオープンになりすぎることについて文句を言わなくなりました。

最終的には次のようになります。

ここに画像の説明を入力してください


2
私はちょうど追加したい1)私のWindows 10(上のこのメソッドの動作を10.0.17134.191/ Cygwinの版w)の箱CYGWIN_NT-10.0-WOW 2.3.1(0.291/5/3) 2015-11-14 12:42とssh版OpenSSH_for_Windows_7.6p1, LibreSSL 2.6.4、および2)ありがとう!@iBug!
-atreyu

キーファイルがサムドライブ/フラッシュディスクにある場合、その[セキュリティ]タブは使用できません。
ディランB

@DylanBなぜリムーバブルドライブに資格情報を入力したのですか?(実際、そのタブはNTFSファイルシステムでのみ使用可能です-ドライブをNTFSに簡単にフォーマットできます)。
iBug

11
実際、私はそれをしましたが、0777の許可があまりにも開かれていると文句を言います。
アーロンブラムソン

10
なぜこれがWindowsでそんなに難しいのですか?誰かが--ignore-stupid-ruleコマンドオプションを追加できますか?
リアムミッチェル

21

キーは、他のアカウント、サービス、またはグループではなく、対象のユーザーのみがアクセスできる必要があります。

  • GUI:
    • [ファイル]プロパティ-セキュリティ-詳細
      1. 所有者をキーのユーザーに設定します
      2. すべてのユーザー、グループ、およびサービスを削除し、キーのユーザーを除き、下のアクセス許可エントリ
      3. キーのユーザーをフルコントロールに設定する


  • CLI:

    :: Set Variable ::
    set key="C:\Path\to\key"
    
    :: Remove Inheritance ::
    cmd /c icacls %key% /c /t /inheritance:d
    
    :: Set Ownership to Owner ::
    cmd /c icacls %key% /c /t /grant %username%:F
    
    :: Remove All Users, except for Owner ::
    cmd /c icacls %key%  /c /t /remove Administrator "Authenticated Users" BUILTIN\Administrators BUILTIN Everyone System Users
    
    :: Verify ::
    cmd /c icacls %key%

所有者が実際にグループである場合はどうなりますか?私の場合、私はが所有するファイルを持っているnetwork serviceCygwinは許可が0770ではなく0700であると考えて
hyspace

ファイルは、グループだけでなく、ユーザーとグループが所有する必要があります。グループ権限は、4進明細書およびSSHキーで3進を[ユーザーは2である]基等にアクセスすることはできませんです
JW0914

Unixの場合です。Windowsでは、network serviceファイルを所有することができ、それがグループである
hyspace

Cygwinは、WindowsでPOSIX API機能を許可しますが、ネイティブUNIXベースのプログラムの規則の下で動作します(したがって、UGOセットアップでは3および4の8進数の許可)。MicrosoftのWin32-OpenSSHのGitHubで問題を開くことはできますが、SSHキーはグループであり、他のユーザーはアクセスできないため、説明した方法で所有権を持つことはサポートされていません。[おそらく]サポートされていない方法でプログラムを構成しようとするよりも、プログラムの規範に準拠する方が適切です。
JW0914

1
これは正解です。CLIオプションをありがとう。GUIは、常にWindowsの場合を吸い込みます。
shyammakwana.me

10

ibugが提供する答えに加えて。私はウィンドウ内でubuntuシステムを使用してsshコマンドを実行していたので。まだ機能していませんでした。だから私はやった

sudo ssh ...

そしてそれは働いた


sudoセキュリティ上のリスクがあるため、SSHセッションを開くために使用しないでください。唯一の時間(私の知る少なくともこと)ルートのアカウントがSSHセッションを開くために利用すべきではシングルユーザーシステムである(すなわち、通常はOSのルーターで見つかった[OpenWrtの、DD-WRTなど]およびその他の組み込みシステム)。SSHキー、他のアカウント、サービス、またはグループではなく、対象のユーザーのみがアクセスできる必要があります。
JW0914

@ JW0914 LOL私はシングルユーザーDebianサーバーを所有しており、唯一の(ログイン)ユーザーはrootです。余分な非rootユーザーは私の個人サーバーであり、メンテナンス作業を実行する場合にのみログインするため、有益ではないと思います。
5

あなたが完全に第二の文...逃し表示されているとおり、私のコメントを再読み込みしてください@iBug
JW0914

5

私も同じ問題を抱えていて、実行しているSSHのバージョンに関連しているようです。

入力した場合

where ssh

わかった...

C:\Windows\System32\OpenSSH\ssh.exe
C:\Program Files\Git\usr\bin\ssh.exe

ssh -V両方の場所で実行すると、

OpenSSH_7.5p1, without OpenSSL
OpenSSH_7.3p1, OpenSSL 1.0.2k  26 Jan 2017

...それぞれ

したがって、sshgit / binディレクトリから実行すると、正常に機能し、アクセス権について文句を言うことはありませんが、SSHの以前のインストールを使用して同じコマンドラインを実行すると、これが返されます。

Load key "t:\\mykeys\\rich-private.ppk": invalid format
banana@127.0.0.127: Permission denied (publickey).

追伸 ファイルに対するアクセス許可は、自分自身に対するフルアクセスであり、それ以外は何もありません。


セキュリティからDISM、Resetオプション(WinSxSディレクトリを利用するために改善された)を使用してinstall.esd破損したWindowsディレクトリを修正する必要がある場合、OpenSSHはWindowsディレクトリにインストールされるべきではありません。対元に戻す
JW0914

これは私を助けたものです、私はこのシナリオで動作するWindows sshバージョンを得たことはありません、Gitのみ:(
cudacoder

これも私にとっての修正でした。Windows 10 Proには、opensshのバージョンがバンドルされているようです。C:\ Windows \ System32 \ OpenSSHフォルダーを削除し、gitのssh.exeをPATHに追加する必要がありました。
シュクリアダムス

\プログラムファイル\のGit \ USR \ binに\ Cのようにこれは、ssh.exe作品:これは、Cを使用して、私のためにそれを"固定" \ WINDOWS \ System32に\ OpenSSHの\これは、ssh.exeはありません
smartins

3

あなたはjsut 2のものが必要です:

1)継承を無効にする ここに画像の説明を入力してください

2)継承されたアクセス許可を明示的なアクセス許可に変換する ここに画像の説明を入力してください

3)ユーザーグループの削除 ここに画像の説明を入力してください

4)ユーザーはプライベートファイルにアクセスできなくなります。これでid_rsaを追加できます。 ここに画像の説明を入力してください


2

私は同様の問題を抱えていましたが、私は働いていたので、職場のコンピューターのファイル許可を変更することができませんでした。あなたがする必要があるのは、WSLをインストールしてから、キーをWSLの隠しsshディレクトリにコピーすることです:

cp <path to your key> ~/.ssh/<name of your key>

これで、通常どおりアクセス許可を変更できるはずです。

sudo chmod 600 ~/.ssh/<your key's name>

次に、WSLを使用してsshを実行します。

ssh -i ~/.ssh/<name of your key> <username>@<ip address>



1

ファイル許可を調整するために、chmodの代わりにWindowsでicaclsを使用できます。現在のユーザーに読み取り許可を与え、他のすべてを削除するには、

icacls <file name> /inheritance:r
icacls <file name> /grant:r "%username%":"(R)"

0

これは@ JW0914のCLI回答のスクリプトバージョンにすぎないため、何よりもまず彼に賛成してください。また、これは最初のPowerShellスクリプトなので、提案を歓迎します。

# DO the following in powerhsell if not already done:
# Set-ExecutionPolicy RemoteSigned


# NOTE: edit the path in this command if needed
$sshFiles=Get-ChildItem -Path C:\DevContainerHome\.ssh -Force

$sshFiles | % {
  $key = $_
  & icacls $key /c /t /inheritance:d
  & icacls $key /c /t /grant %username%:F
  & icacls $key  /c /t /remove Administrator "Authenticated Users" BUILTIN\Administrators BUILTIN Everyone System Users
}

# Verify:
$sshFiles | % {
  icacls $_
}


0

私はWindowsユーザーで、Windowsのbashを使用し、Windows GUIを使用して許可を設定するためのすべての手順を実行しましたが、まだ機能せず、文句を言います。

Permissions 0555 for 'my_ssh.pem' are too open.
It is required that your private key files are NOT accessible by others.

sudoはsshコマンドの前に追加しましたが、それはちょうど動作します。これが他の人に役立つことを願っています。


しかし、あなたは自分自身またはルートとしてサーバーにログインしますか?
G-Manは

私は自分でWindow bashターミナルを実行していますが、Bashを起動するときに「管理者として実行」を実行しました。
アレックスラムセス

-1

iBugによる回答は問題なく動作します!それに従って、この問題を取り除くことができます。

しかし、権限の設定中に問題に直面したため、クリアする必要があるものはほとんどありません。問題を理解するのに数分かかりました。

iBugの答えに従って、すべてのアクセス許可を削除しますが、フルコントロールアクセス許可をどのように設定しますか?私はそれを行う方法を知らなかったので、私は最初に立ち往生した場所です。

継承を無効にした後、許可されたすべてのユーザーまたはグループを削除できます。

それをしたら、

をクリックしてAddからをクリックしてSet a Principalからを入力SystemAdministratorsyour email addredd下部のフィールドにおよびをクリックしてをクリックしcheck namesます。

ユーザーが存在する場合、名前をロードします。次に、OK> [種類] Allow> [基本的な許可]をクリックしFull Controlます。Okay

これにより、SYSTEM、管理者、およびユーザーに対するフルコントロールのアクセス許可が設定されます。

その後、そのキーを使用してsshを試行します。今すぐ解決する必要があります。

私は同じ問題を抱えており、この方法を使用してそれを解決しました。その名前のユーザーまたはグループがあれば、それをロードします。

-スクリーンショット-

許可エントリ プリンシパルの選択/ユーザーまたはグループの選択

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.