Windows SSH: le autorizzazioni per "chiave privata" sono troppo aperte


102

Ho OpenSSH 7.6 installato in Windows 7 a scopo di test. Il client e il server SSH funzionano bene fino a quando ho provato ad accedere a una delle mie scatole AWS EC2 da questa finestra.

Sembra che debba modificare l'autorizzazione sul file della chiave privata. Questo può essere fatto facilmente su unix / linux conchmod comando.

Che dire di Windows?

private-key.ppm viene copiato direttamente da AWS e immagino che anche l'autorizzazione.

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:\>

Hai provato a modificare l'ACL?
Ignacio Vazquez-Abrams,

1
La tua chiave privata è effettivamente nel percorso C: \ root? Vedo perché si lamenta come al solito le cose in C: \ sono accessibili a tutti. Hai provato a spostarlo in una cartella a cui solo tu come utente hai accesso (es. C: \ Users \ nomeutente \ desktop) e vedi se quel messaggio continua a comparire?
Dario

@Dario, sì lo è. Quando copi un file da unix / linux a Windows, viene copiata anche l'autorizzazione. Devo cambiare questo, ma non sono sicuro di come farlo su Windows. Questo può essere fatto facilmente su unix / linux con il comando chmod.
Sabrina,

@ IgnacioVazquez-Abrams, ACL? Che tipo di ACL?
Sabrina,

1
@Sabrina O si utilizza il comando icacls per modificare l'autorizzazione o semplicemente fare clic con il tasto destro sulla chiave privata, selezionare Proprietà e controllare nella scheda "Sicurezza". E assicurati che sia accessibile solo da te / chiunque dovrebbe essere in grado di accedere alla chiave privata. Se "Utenti" hanno accesso in lettura - significa che chiunque abbia accesso al sistema può leggere quella chiave privata.
Dario

Risposte:


119

Individua il file in Esplora risorse, fai clic destro su di esso e seleziona "Proprietà". Passare alla scheda "Sicurezza" e fare clic su "Avanzate".

Cambia il proprietario per te, disabilita l'eredità ed elimina tutte le autorizzazioni. Quindi concediti "Controllo completo" e salva le autorizzazioni. Ora SSH non si lamenterà più del permesso di file troppo aperto.

Dovrebbe finire così:

inserisci qui la descrizione dell'immagine


2
Vorrei solo aggiungere 1) Questo metodo funziona sul mio Windows 10 ( 10.0.17134.191) box con Cygwin ver CYGWIN_NT-10.0-WOW 2.3.1(0.291/5/3) 2015-11-14 12:42e ssh ver OpenSSH_for_Windows_7.6p1, LibreSSL 2.6.4e 2) Grazie! @iBug!
Atreyu,

SE il file della chiave si trova sul disco Thumb Drive / Flash, quella scheda Sicurezza non è disponibile!
Dylan B,

@DylanB Perché hai messo le credenziali su un'unità rimovibile? (In effetti, quella scheda è disponibile solo sui filesystem NTFS: puoi formattare facilmente l'unità in NTFS).
iBug

11
In realtà, l'ho fatto e si lamenta ancora che le autorizzazioni 0777 siano troppo aperte.
Aaron Bramson,

10
Perché è così difficile su Windows, qualcuno può semplicemente aggiungere un'opzione di comando --ignore-stupid-rule?
Liam Mitchell,

22

Le chiavi devono essere accessibili solo all'utente a cui sono destinate e nessun altro account, servizio o gruppo.

  • GUI:
    • Proprietà [File] - Sicurezza - Avanzate
      1. Imposta proprietario come utente della chiave
      2. Rimuovere tutti gli utenti, gruppi e servizi, tranne l'utente della chiave , in Voci autorizzazione
      3. Imposta l'utente chiave su Controllo completo


  • 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%

Cosa succede se il proprietario è effettivamente un gruppo? Nel mio caso, ho un file di proprietà di network serviceCygwin che pensa che l'autorizzazione sia 0770 anziché 0700.
hyspace

Un file deve essere di proprietà di un utente e un gruppo, non solo un gruppo. I permessi di gruppo sono il terzo ottale [l'utente è il secondo] in una specifica di quattro ottali e le chiavi SSH non possono essere di gruppo o accessibili ad altri
JW0914

Questo è il caso di Unix. In Windows, network servicepuò possedere un file ed è un gruppo
hyspace

Cygwin consente la funzionalità API POSIX su Windows, ma funziona ancora secondo le regole dei programmi nativi basati su UNIX (quindi autorizzazioni 3 e 4 ottali in una configurazione UGO). Sebbene sia possibile aprire un problema su GitHub di Win32-OpenSSH di Microsoft, poiché le chiavi SSH devono essere di gruppo e altre inaccessibili , possedere la proprietà nel modo descritto non è probabilmente supportato. È meglio conformarsi alla norma di un programma piuttosto che tentare di configurarlo in un modo [probabilmente] non supportato.
JW0914,

1
questa dovrebbe essere una risposta corretta. Grazie per le opzioni della CLI. La GUI fa sempre schifo nel caso di Windows.
shyammakwana.me

10

Oltre alla risposta fornita da ibug. Da quando stavo usando il sistema Ubuntu all'interno di Windows per eseguire il comando ssh. Non funzionava ancora. Così ho fatto

sudo ssh ...

e poi ha funzionato


sudonon dovrebbe essere utilizzato per aprire una sessione SSH in quanto rappresenta un rischio per la sicurezza. L'unica volta (almeno di cui sono a conoscenza) l'account di root deve essere utilizzato per aprire una sessione SSH è su sistemi a utente singolo (ovvero normalmente si trovano su sistemi operativi router [OpenWrt, DD-WRT, ecc.] E altri sistemi integrati ) . Le chiavi SSH devono essere accessibili solo all'utente per cui si trovano e nessun altro account, servizio o gruppo.
JW0914,

@ JW0914 LOL Ho un server Debian per utente singolo e l'unico utente (login) è root. Non penso che un utente extra non root sia utile perché è il mio server personale e accedo solo quando eseguo lavori di manutenzione.
iBug

@iBug Ti preghiamo di rileggere il mio commento, poiché sembra che tu abbia perso completamente la seconda frase ...
JW0914,

5

Ho avuto lo stesso problema e sembra essere correlato alla versione di SSH in esecuzione.

Se scrivo

where ssh

Ottengo...

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

Quando corro ssh -Vin entrambe le posizioni, ottengo

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

...rispettivamente

Quindi, quando corro sshdalla directory git / bin, funziona bene e non si lamenta delle autorizzazioni, ma esegue la stessa riga di comando, usando la precedente installazione di SSH, torna con questo.

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

ps. le autorizzazioni sul file sono solo un pieno accesso per me stesso e nient'altro.


OpenSSH non dovrebbe essere installato nella directory di Windows per tutta una serie di motivi, dalla sicurezza, al fatto che si tratta di un grave inconveniente nel caso in cui si debba riparare una directory di Windows danneggiata tramite DISMo usando l'opzione Reset (che è stata migliorata per utilizzare la directory di WinSxS rispetto al ripristino dell'originale install.esd) .
JW0914

Questo è ciò che mi ha aiutato, non ho mai avuto la versione di Windows SSH per funzionare in questo scenario, solo Git's :(
cudacoder

Questa è stata anche la soluzione per me. Sembra che Windows 10 Pro ora includa una versione scaduta di openssh. Sono stato costretto a rimuovere la cartella C: \ Windows \ System32 \ OpenSSH e ad aggiungere ssh.exe di git al PERCORSO.
Shukri Adams,

Questo "risolto" per me, usando C: \ Programmi \ Git \ usr \ bin \ ssh.exe funziona come C: \ Windows \ System32 \ OpenSSH \ ssh.exe no
smartins

3

Hai bisogno di jsut 2 cose:

1) Disabilita l'ereditarietà inserisci qui la descrizione dell'immagine

2) Convertire le autorizzazioni ereditate in autorizzazioni esplicite inserisci qui la descrizione dell'immagine

3) Rimuovere il gruppo Utenti inserisci qui la descrizione dell'immagine

4) Finirai senza che gli utenti possano accedere ai file privati, questo dovrebbe essere sufficiente per aggiungere id_rsa. inserisci qui la descrizione dell'immagine


2

Ho avuto un problema simile ma ero al lavoro e non ho la possibilità di modificare le autorizzazioni dei file sul mio computer di lavoro. Quello che devi fare è installare WSL, quindi copiare la chiave nella directory ssh nascosta in WSL:

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

Ora dovresti essere in grado di modificare le autorizzazioni normalmente.

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

Quindi ssh usando WSL:

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


2

usa il comando seguente sulla tua chiave funziona su Windows

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

1

Puoi usare icacls in Windows invece di chmod per regolare i permessi dei file. Per autorizzare l'utente corrente a leggere e rimuovere tutto il resto,

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

1

Questa è solo una versione con script della risposta CLI di @ JW0914, quindi votalo prima di tutto. Inoltre, è il mio primo script PowerShell, quindi suggerimenti benvenuti.

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

1

Una sola riga in CMD potrebbe fare il trucco (come descritto qui: https://serverfault.com/a/883338/550334 ), ovvero aggiungere la chiave da stdin invece di cambiare i permessi:

cat /path/to/permission_file | ssh-add -k 

Per verificare se la chiave è stata aggiunta:

ssh-add -l


0

Sono un utente di Windows, utilizzo la bash di Windows e ho seguito tutti i passaggi per impostare l'autorizzazione utilizzando la GUI di Windows, e ancora non funziona e si lamenta:

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

L'ho aggiunto sudonella parte anteriore del comando ssh e funziona. Spero che questo sia utile per gli altri.


Ma accedi al server come te stesso o come root?
G-Man dice "Reinstate Monica" il

Eseguo il terminale Window bash come me stesso, ma quando ho lanciato Bash ho fatto "Esegui come amministratore".
Alex Ramses

-1

La risposta di iBug funziona bene! Puoi seguirlo e sbarazzarti di questo problema.

Ma ci sono alcune cose che devono essere chiarite quando ho affrontato i problemi durante l'impostazione delle autorizzazioni e ci sono voluti pochi minuti per capire il problema!

Seguendo la risposta di iBug, rimuoverai tutte le autorizzazioni ma come imposti l'autorizzazione Controllo completo su te stesso? è lì che all'inizio mi sono bloccato perché non sapevo come farlo.

Dopo aver disabilitato l'ereditarietà, sarai in grado di eliminare tutti gli utenti o gruppi consentiti.

Fatto questo,

Fare clic su Addquindi fare clic su Set a Principalquindi inserire Systeme Administratorse your email addreddnel campo in basso quindi fare clic su check names.

Caricherà il nome se l'utente esiste. Quindi, fare clic su OK> Tipo Allow> Autorizzazioni di base Full Control>Okay

Ciò imposterà l'autorizzazione Controllo completo a SYSTEM, amministratori e il tuo utente.

Dopo di ciò prova a ssh usando quel tasto. Dovrebbe essere risolto ora.

Ho avuto lo stesso problema e l'ho risolto usando questo metodo. Se c'è un utente o un gruppo con quel nome, lo caricherà.

-Screenshots-

Voci di autorizzazione Seleziona un principale / Seleziona utente o gruppi

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.