Windows SSH: uprawnienia do „klucza prywatnego” są zbyt otwarte

100

Mam OpenSSH 7.6 zainstalowany w systemie Windows 7 do celów testowych. Klient i serwer SSH działają dobrze, dopóki nie spróbowałem uzyskać dostępu do jednego z moich urządzeń AWS EC2 z tego okna.

Wygląda na to, że muszę zmienić uprawnienia do pliku klucza prywatnego. Można to łatwo zrobić na Unix / Linux za pomocą chmodpolecenia.

Co z oknami?

private-key.ppm jest kopiowany bezpośrednio z AWS i myślę, że również pozwolenie.

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
źródło
Czy próbowałeś zmodyfikować listę ACL?
Ignacio Vazquez-Abrams
1
Czy Twój klucz prywatny znajduje się w ścieżce katalogu głównego C: \? Rozumiem, dlaczego to narzeka, jak zwykle rzeczy w C: \ są dostępne dla wszystkich. Czy próbowałeś przenieść go do folderu, do którego masz dostęp tylko Ty jako użytkownik (np. C: \ Users \ nazwa użytkownika \ desktop) i sprawdź, czy ten komunikat nadal pojawia się?
Dariusz
@Darius, tak to jest. Kiedy kopiujesz plik z unix / linux do Windows, uprawnienie jest również kopiowane. Muszę to zmienić, ale nie jestem pewien, jak to zrobić w systemie Windows. Można to łatwo zrobić na unix / linux za pomocą komendy chmod.
Sabrina
@ IgnacioVazquez-Abrams, ACL? Jakiego rodzaju ACL?
Sabrina
1
@ Sabrina Albo używasz polecenia icacls, aby zmienić uprawnienia, albo po prostu kliknij prawym przyciskiem myszy klucz prywatny, wybierz Właściwości i sprawdź w zakładce „Bezpieczeństwo”. I upewnij się, że jest on dostępny tylko dla Ciebie / każdego, kto powinien mieć dostęp do klucza prywatnego. Jeśli „Użytkownicy” mają dostęp do odczytu - oznacza, że ​​każdy, kto ma dostęp do systemu, może odczytać ten klucz prywatny.
Dariusz

Odpowiedzi:

114

Zlokalizuj plik w Eksploratorze Windows, kliknij go prawym przyciskiem myszy, a następnie wybierz „Właściwości”. Przejdź do zakładki „Bezpieczeństwo” i kliknij „Zaawansowane”.

Zmień właściciela na siebie, wyłącz dziedziczenie i usuń wszystkie uprawnienia. Następnie daj sobie „pełną kontrolę” i zapisz uprawnienia. Teraz SSH nie będzie już narzekać na zbyt otwarte uprawnienia do plików.

Powinno to wyglądać następująco:

wprowadź opis zdjęcia tutaj

iBug
źródło
2
Chciałbym tylko dodać 1) Ta metoda działa na moim systemie Windows 10 ( 10.0.17134.191) w wersji Cygwin ver CYGWIN_NT-10.0-WOW 2.3.1(0.291/5/3) 2015-11-14 12:42i ssh ver OpenSSH_for_Windows_7.6p1, LibreSSL 2.6.4oraz 2) Dzięki! @iBug!
atreyu
JEŚLI plik klucza znajduje się na dysku USB / dysku flash, karta Zabezpieczenia nie jest dostępna!
Dylan B
@DylanB Dlaczego umieściłeś poświadczenia na dysku wymiennym? (W rzeczywistości ta karta jest dostępna tylko w systemach plików NTFS - możesz łatwo sformatować dysk do NTFS).
iBug
11
Właściwie to zrobiłem i nadal narzeka, że ​​uprawnienia 0777 są zbyt otwarte.
Aaron Bramson,
10
Dlaczego w Windowsie jest to takie trudne, czy ktoś może po prostu dodać opcję polecenia --ignore-głupia-reguła?
Liam Mitchell,
21

Klucze muszą być dostępne tylko dla użytkownika, dla którego są przeznaczone, a nie dla żadnego innego konta, usługi lub grupy.

  • GUI:
    • [Plik] Właściwości - Bezpieczeństwo - Zaawansowane
      1. Ustaw właściciela na użytkownika klucza
      2. Usuń wszystkich użytkowników, grupy i usługi, z wyjątkiem użytkownika klucza , w obszarze Wpisy uprawnień
      3. Ustaw użytkownika klucza na Pełna kontrola


  • 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
źródło
Co jeśli właściciel jest faktycznie grupą? W moim przypadku mam plik, network servicewięc Cygwin uważa, że ​​pozwolenie to 0770 zamiast 0700.
hyspace
Plik musi być własnością użytkownika i grupy, a nie tylko grupy. Uprawnienia grupowe to trzeci ósemkowy [użytkownik jest drugi] w specyfikacji cztero ósemkowej, a klucze SSH nie mogą być dostępne dla grup ani dla innych osób
JW0914,
Tak jest w przypadku Uniksa. W systemie Windows network servicemoże posiadać plik i jest to grupa
hyspace
Cygwin zezwala na funkcjonalność POSIX API w systemie Windows, ale nadal działa zgodnie z zasadami natywnych programów opartych na UNIX (stąd 3 i 4 uprawnienia ósemkowe w konfiguracji UGO). Chociaż możesz otworzyć problem w GitHubie Win32-OpenSSH Microsoftu, ponieważ klucze SSH muszą być grupowe, a inne niedostępne , posiadanie własności w opisany sposób prawdopodobnie nie jest obsługiwane. Lepiej jest dostosować się do normy programu niż próbować skonfigurować go w [prawdopodobnie] nieobsługiwany sposób.
JW0914
1
to powinna być poprawna odpowiedź. Dzięki za opcje CLI. GUI zawsze jest do bani w przypadku systemu Windows.
shyammakwana.me
10

Oprócz odpowiedzi udzielonej przez ibug. Ponieważ używałem systemu Ubuntu w systemie Windows do uruchomienia polecenia ssh. To wciąż nie działało. Więc zrobiłem

sudo ssh ...

i wtedy zadziałało

Parv Sharma
źródło
sudonie powinien być wykorzystywany do otwierania sesji SSH, ponieważ stanowi to zagrożenie bezpieczeństwa. Jedynym czasem (przynajmniej, o którym wiem), że konto roota powinno zostać wykorzystane do otwarcia sesji SSH, jest w systemach dla jednego użytkownika (tj. Zwykle znajduje się w systemie operacyjnym routera [OpenWrt, DD-WRT itp.] I innych systemach wbudowanych ) . Klucze SSH muszą być dostępne tylko dla użytkownika, dla którego są, a nie dla żadnego innego konta, usługi ani grupy.
JW0914
@ JW0914 LOL Mam serwer Debiana dla jednego użytkownika, a jedynym użytkownikiem (loginem) jest root. Nie sądzę, aby dodatkowy użytkownik inny niż root był pożyteczny, ponieważ jest to mój osobisty serwer i loguję się tylko podczas wykonywania prac konserwacyjnych.
iBug
@ iBug Proszę ponownie przeczytać mój komentarz, ponieważ wygląda na to, że całkowicie przegapiłeś drugie zdanie ...
JW0914,
5

Miałem ten sam problem i wydaje się, że jest on związany z wersją SSH, którą prowadzisz.

Jeśli piszę

where ssh

Dostaję...

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

Kiedy biegam ssh -Vw obu lokalizacjach, dostaję

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

...odpowiednio

Kiedy więc uruchamiam sshz katalogu git / bin, działa dobrze i nie narzeka na uprawnienia, ale uruchamia ten sam wiersz poleceń, używając poprzedniej instalacji SSH, wraca z tym.

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

ps. uprawnienia do pliku mają dla mnie pełny dostęp i nic więcej.

Rich S.
źródło
OpenSSH nie powinien być instalowany w katalogu Windows z wielu powodów, od bezpieczeństwa, aż do ogromnej niedogodności, jeśli trzeba naprawić uszkodzony katalog Windows za pomocą DISMlub za pomocą opcji Reset (która została ulepszona w celu wykorzystania katalogu WinSxS w porównaniu do powrotu do oryginału install.esd) .
JW0914
To mi pomogło, nigdy nie dostałem wersji Windows ssh do pracy w tym scenariuszu, tylko Git's :(
cudacoder
To była również poprawka dla mnie. Wygląda na to, że system Windows 10 Pro zawiera teraz gotową wersję openssh. Byłem zmuszony usunąć folder C: \ Windows \ System32 \ OpenSSH i dodać ssh.exe git do PATH.
Shukri Adams
To „naprawiło” to dla mnie, używając C: \ Program Files \ Git \ usr \ bin \ ssh.exe działa tak, jak C: \ Windows \ System32 \ OpenSSH \ ssh.exe nie działa
smartins
3

Potrzebujesz jsut 2 rzeczy:

1) Wyłącz dziedziczenie wprowadź opis zdjęcia tutaj

2) Konwertuj odziedziczone uprawnienia na uprawnienia jawne wprowadź opis zdjęcia tutaj

3) Usuń grupę użytkowników wprowadź opis zdjęcia tutaj

4) Skończysz, że użytkownicy nie będą mieli dostępu do prywatnych plików, powinno to wystarczyć, aby dodać id_rsa. wprowadź opis zdjęcia tutaj

Artur Mustafin
źródło
2

Miałem podobny problem, ale byłem w pracy i nie mam możliwości zmiany uprawnień do plików na moim komputerze roboczym. Co musisz zrobić, to zainstalować WSL, a następnie skopiować klucz do ukrytego katalogu ssh w WSL:

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

Teraz powinieneś być w stanie normalnie modyfikować uprawnienia.

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

Następnie ssh przy użyciu WSL:

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

JKauffman
źródło
2

użyj poniżej polecenia na swoim klawiszu, to działa w systemie Windows

icacls .\private.key /inheritance:r
icacls .\private.key /grant:r "%username%":"(R)"
Walter Ferrao
źródło
1

Możesz użyć icacls w Windows zamiast chmod, aby dostosować uprawnienia do plików. Aby dać bieżącemu użytkownikowi uprawnienia do odczytu i usunąć wszystko inne,

icacls <file name> /inheritance:r
icacls <file name> /grant:r "%username%":"(R)"
manjuv
źródło
0

To jest tylko skryptowa wersja odpowiedzi CLI @ JW0914, więc proszę go głosować przede wszystkim. Jest to także mój pierwszy skrypt PowerShell, więc sugestie są mile widziane.

# 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 $_
}
bbarker
źródło
0

Zastosowanie Mingw-w64.

Informacje: http://mingw-w64.org/doku.php

Pobierz za pomocą Git na Windows lub bezpośrednio.

Dostępne tutaj: https://github.com/mirror/mingw-w64

git clone https://github.com/mirror/mingw-w64

Posiada również inne przydatne polecenia systemu Linux, takie jak tari gzip.

Dallas Clarke
źródło
-1

Odpowiedź od iBug działa dobrze! Możesz to zrobić i pozbyć się tego problemu.

Ale jest kilka rzeczy, które należy usunąć, ponieważ napotkałem problemy podczas konfigurowania uprawnień i zajęło mi to kilka minut, aby znaleźć problem!

Po odpowiedzi iBuga usuniesz wszystkie uprawnienia, ale jak sam sobie ustawiasz uprawnienia Pełna kontrola? właśnie tam utknąłem, ponieważ nie wiedziałem, jak to zrobić.

Po wyłączeniu dziedziczenia będziesz mógł usunąć wszystkich dozwolonych użytkowników lub grupy.

Gdy to zrobisz,

Kliknij Addnastępnie kliknij Set a Principalnastępnie wprowadzić Systemi Administratorsi your email addreddw polu na dole a następnie kliknij check names.

Załaduje nazwę, jeśli użytkownik istnieje. Następnie kliknij OK> Typ Allow> Podstawowe uprawnienia Full Control>Okay

Spowoduje to skonfigurowanie uprawnienia Pełna kontrola dla SYSTEMU, administratorów i Twojego użytkownika.

Następnie spróbuj ssh używając tego klucza. To powinno być teraz rozwiązane.

Miałem ten sam problem i rozwiązałem go za pomocą tej metody. Jeśli istnieje jakikolwiek użytkownik lub grupa o takiej nazwie, załaduje to.

-Zrzuty ekranu-

Wpisy uprawnień Wybierz głównego / Wybierz użytkownika lub grupy

lazycipher
źródło