Windows SSH: Berechtigungen für 'Private-Key' sind zu offen

99

Ich habe OpenSSH 7.6 in Windows 7 zu Testzwecken installiert. SSH-Client und -Server funktionieren einwandfrei, bis ich über dieses Fenster versucht habe, auf eine meiner AWS EC2-Boxen zuzugreifen.

Anscheinend muss ich die Berechtigung für die private Schlüsseldatei ändern. Dies kann einfach unter Unix / Linux mit chmodBefehl erfolgen.

Was ist mit Fenstern?

private-key.ppm wird direkt von AWS kopiert und ich denke, die Erlaubnis auch.

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

C:\>ver

Microsoft Windows [Version 6.1.7601]

C:\>


C:\>ssh [email protected] -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
[email protected]: Permission denied (publickey).

C:\>
C:\>
C:\>ssh [email protected] -i private-key.ppm
Warning: Identity file private-key.ppm not accessible: No such file or directory.
[email protected]: Permission denied (publickey).

C:\>
Sabrina
quelle
Haben Sie versucht, die ACL zu ändern?
Ignacio Vazquez-Abrams
1
Befindet sich Ihr privater Schlüssel tatsächlich im Pfad C: \ root? Ich kann sehen, warum es sich beschwert, da Dinge in C: \ normalerweise für alle zugänglich sind. Haben Sie versucht, es in einen Ordner zu verschieben, auf den nur Sie als Benutzer Zugriff haben (z. B. C: \ Benutzer \ Benutzername \ Desktop), und zu prüfen, ob diese Meldung weiterhin angezeigt wird?
Darius
@Darius, ja das ist es. Wenn Sie eine Datei von Unix / Linux nach Windows kopieren, wird auch die Berechtigung kopiert. Ich muss dies ändern, bin mir aber nicht sicher, wie ich es unter Windows machen soll. Dies kann einfach unter Unix / Linux mit dem Befehl chmod durchgeführt werden.
Sabrina
@ IgnacioVazquez-Abrams, ACL? Welche Art von ACL?
Sabrina
1
@Sabrina Entweder verwenden Sie den Befehl icacls, um die Berechtigung zu ändern, oder Sie klicken einfach mit der rechten Maustaste auf den privaten Schlüssel, wählen Eigenschaften und überprüfen ihn auf der Registerkarte "Sicherheit". Und stellen Sie sicher, dass nur Sie / wer Zugriff auf den privaten Schlüssel haben soll. Wenn "Benutzer" Lesezugriff haben, kann jeder, der Zugriff auf das System hat, diesen privaten Schlüssel lesen.
Darius

Antworten:

114

Suchen Sie die Datei im Windows Explorer, klicken Sie mit der rechten Maustaste darauf und wählen Sie "Eigenschaften". Navigieren Sie zur Registerkarte "Sicherheit" und klicken Sie auf "Erweitert".

Ändern Sie den Eigentümer in Sie, deaktivieren Sie die Vererbung und löschen Sie alle Berechtigungen. Gewähren Sie sich dann "Vollzugriff" und speichern Sie die Berechtigungen. Jetzt beschwert sich SSH nicht mehr über zu offene Dateiberechtigungen.

Es sollte am Ende so aussehen:

Bildbeschreibung hier eingeben

iBug
quelle
2
Ich möchte nur hinzufügen 1) Diese Methode funktioniert auf meinem Windows 10 ( 10.0.17134.191) -Box mit Cygwin ver CYGWIN_NT-10.0-WOW 2.3.1(0.291/5/3) 2015-11-14 12:42und ssh ver OpenSSH_for_Windows_7.6p1, LibreSSL 2.6.4, und 2) Danke! @iBug!
Atreyu
WENN sich die Schlüsseldatei auf Thumb Drive / Flash Disk befindet, ist die Registerkarte Sicherheit nicht verfügbar!
Dylan B
@DylanB Warum haben Sie Anmeldeinformationen auf einem Wechseldatenträger gespeichert? (Tatsächlich ist diese Registerkarte nur in NTFS-Dateisystemen verfügbar - Sie können Ihr Laufwerk problemlos in NTFS formatieren.)
iBug
11
Eigentlich habe ich das gemacht und es beschwert sich immer noch, dass die 0777-Berechtigungen zu offen sind.
Aaron Bramson
10
Warum ist das unter Windows so schwierig? Kann jemand einfach die Befehlsoption --ignore-stupid-rule hinzufügen?
Liam Mitchell
21

Schlüssel dürfen nur für den Benutzer zugänglich sein, für den sie bestimmt sind, und es dürfen keine anderen Konten, Dienste oder Gruppen vorhanden sein.

  • GUI:
    • [Datei] Eigenschaften - Sicherheit - Erweitert
      1. Setzen Sie Owner auf den Benutzer des Schlüssels
      2. Entfernen Sie alle Benutzer, Gruppen und Dienste mit Ausnahme des Schlüssels unter Berechtigungseinträge
      3. Stellen Sie den Benutzer des Schlüssels auf Vollzugriff ein


  • 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%
JW0914
quelle
Was ist, wenn der Eigentümer tatsächlich eine Gruppe ist? In meinem Fall habe ich eine Datei im Besitz von, network servicesodass Cygwin der Meinung ist, dass die Erlaubnis 0770 statt 0700 lautet.
hyspace
Eine Datei muss einem Benutzer und einer Gruppe gehören, nicht nur einer Gruppe. Gruppenberechtigungen sind das 3. Oktal [Benutzer ist das 2.] in einer 4-Oktal-Spezifikation und SSH-Schlüssel können nicht für Gruppen oder andere zugänglich sein
JW0914
Das ist der Fall von Unix. In Windows network servicekann eine Datei besitzen und es ist eine Gruppe
Hyspace
Cygwin lässt die POSIX-API-Funktionalität unter Windows zu, arbeitet jedoch weiterhin nach den Regeln der nativen UNIX-basierten Programme (daher 3 und 4 Oktalberechtigungen in einem UGO-Setup). Sie können zwar ein Problem mit dem GitHub von Win32-OpenSSH von Microsoft öffnen, da SSH-Schlüssel Gruppenschlüssel und andere nicht zugreifbare Schlüssel sein müssen, wird es jedoch wahrscheinlich nicht unterstützt, Eigentümer in der von Ihnen beschriebenen Weise zu sein. Es ist besser, sich an die Norm eines Programms zu halten, als zu versuchen, es auf eine [wahrscheinlich] nicht unterstützte Weise zu konfigurieren.
JW0914,
1
Das sollte die richtige Antwort sein. Vielen Dank für die CLI-Optionen. GUI saugt immer in Windows Fall.
shyammakwana.me
10

Neben der Antwort von ibug. Da ich das Ubuntu-System in Windows verwendet habe, um den Befehl ssh auszuführen. Es hat immer noch nicht funktioniert. So tat ich

sudo ssh ...

und dann hat es geklappt

Parv Sharma
quelle
sudosollte nicht zum Öffnen einer SSH-Sitzung verwendet werden, da dies ein Sicherheitsrisiko darstellt. Zum Öffnen einer SSH-Sitzung sollte das Root-Konto nur auf Einzelbenutzersystemen (dh normalerweise auf Router-Betriebssystemen [OpenWrt, DD-WRT usw.] und anderen eingebetteten Systemen ) verwendet werden (zumindest mir ist dies bekannt) ) . SSH-Schlüssel dürfen nur für den Benutzer zugänglich sein, für den sie bestimmt sind, und es dürfen keine anderen Konten, Dienste oder Gruppen vorhanden sein.
JW0914,
@ JW0914 LOL Ich habe einen Einzelbenutzer-Debian-Server und der einzige (Login-) Benutzer ist root. Ich denke nicht, dass ein zusätzlicher Benutzer ohne Rootberechtigung von Vorteil ist, da es sich um meinen persönlichen Server handelt und ich mich nur bei Wartungsarbeiten anmelde.
iBug
@iBug Bitte lies meinen Kommentar noch einmal durch, da es so aussieht, als hättest du den zweiten Satz komplett verpasst ...
JW0914
5

Ich hatte das gleiche Problem und es scheint mit der Version von SSH zu tun zu haben, die Sie verwenden.

Wenn ich tippe

where ssh

Ich bekomme...

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

Wenn ich ssh -Van beiden Orten renne, bekomme ich

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

...beziehungsweise

Also, wenn ich sshaus dem git / bin-Verzeichnis rufe, funktioniert es einwandfrei und beschwert sich nicht über die Berechtigungen, aber wenn ich dieselbe Befehlszeile mit der früheren Installation von SSH laufen lasse, kehrt es damit zurück.

Load key "t:\\mykeys\\rich-private.ppk": invalid format
[email protected]: Permission denied (publickey).

ps. Die Berechtigungen für die Datei sind nur der volle Zugriff für mich und sonst nichts.

Rich S
quelle
OpenSSH sollte aus einer Vielzahl von Gründen, von der Sicherheit bis hin zu massiven Unannehmlichkeiten, nicht im Windows-Verzeichnis installiert werden, wenn ein beschädigtes Windows-Verzeichnis entweder über DISMdie Option "Zurücksetzen" (die verbessert wurde, um das WinSxS-Verzeichnis zu verwenden) repariert werden muss versus auf das Original zurückgreifen install.esd) .
JW0914
Das hat mir geholfen, ich habe in diesem Szenario nie die Windows-SSH-Version zum
Laufen gebracht
Dies war auch die Lösung für mich. Es scheint, dass Windows 10 Pro jetzt eine verspielte Version von openssh enthält. Ich musste den Ordner C: \ Windows \ System32 \ OpenSSH entfernen und gits ssh.exe zu PATH hinzufügen.
Shukri Adams
Dies "behoben" für mich, mit C: \ Programme \ Git \ usr \ bin \ ssh.exe funktioniert als C: \ Windows \ System32 \ OpenSSH \ ssh.exe nicht
Smartins
3

Sie brauchen nur 2 Dinge:

1) Deaktivieren Sie die Vererbung Bildbeschreibung hier eingeben

2) Konvertieren Sie geerbte Berechtigungen in explizite Berechtigungen Bildbeschreibung hier eingeben

3) Benutzergruppe entfernen Bildbeschreibung hier eingeben

4) Sie werden am Ende keine Benutzer haben, die auf private Dateien zugreifen können. Dies sollte ausreichen, um id_rsa hinzuzufügen. Bildbeschreibung hier eingeben

Artur Mustafin
quelle
2

Ich hatte ein ähnliches Problem, war aber auf der Arbeit und konnte die Dateiberechtigungen auf meinem Arbeitscomputer nicht ändern. Sie müssen WSL installieren und dann Ihren Schlüssel in das versteckte ssh-Verzeichnis in WSL kopieren:

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

Jetzt sollten Sie in der Lage sein, die Berechtigungen normal zu ändern.

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

Dann ssh mit WSL:

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

JKauffman
quelle
2

Verwenden Sie den folgenden Befehl für Ihre Taste, er funktioniert unter Windows

icacls .\private.key /inheritance:r
icacls .\private.key /grant:r "%username%":"(R)"
Walter Ferrao
quelle
1

Sie können icacls in Windows anstelle von chmod verwenden, um die Dateiberechtigung anzupassen. Um dem aktuellen Benutzer Leseberechtigung zu erteilen und alles andere zu entfernen,

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

Dies ist nur eine geskriptete Version der CLI-Antwort von @ JW0914. Es ist auch mein erstes PowerShell-Skript, daher sind Vorschläge willkommen.

# 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 $_
}
Barker
quelle
-1

Antwort von iBug funktioniert gut! Sie können dem folgen und dieses Problem loswerden.

Es gibt jedoch einige Dinge, die geklärt werden müssen, da ich beim Einrichten der Berechtigungen auf Probleme gestoßen bin, und es dauerte einige Minuten, bis ich das Problem herausgefunden hatte!

Nach der Antwort von iBug entfernen Sie alle Berechtigungen, aber wie stellen Sie die Vollzugriffsberechtigung auf sich selbst ein? Das war der Punkt, an dem ich zuerst feststeckte, da ich nicht wusste, wie ich das machen sollte.

Nach dem Deaktivieren der Vererbung können Sie alle zulässigen Benutzer oder Gruppen löschen.

Sobald Sie damit fertig sind,

Klicken Sie auf, Addklicken Sie auf, Set a Principalgeben Sie ein Systemund Administratorsund your email addreddklicken Sie im unteren Feld auf check names.

Der Name wird geladen, wenn der Benutzer existiert. Klicken Sie anschließend auf OK> Typ Allow> Grundlegende Berechtigungen Full Control>Okay

Dadurch wird die Vollzugriffsberechtigung für SYSTEM, Administratoren und Ihren Benutzer eingerichtet.

Versuchen Sie anschließend, mit diesem Schlüssel ssh auszuführen. Es sollte jetzt gelöst werden.

Ich hatte das gleiche Problem und löste es mit dieser Methode. Wenn es einen Benutzer oder eine Gruppe mit diesem Namen gibt, wird dieser geladen.

-Screenshots-

Berechtigungseinträge Prinzipal auswählen / Benutzer oder Gruppen auswählen

Lazycipher
quelle