Windows SSH: los permisos para 'clave privada' son demasiado abiertos

102

Tengo OpenSSH 7.6 instalado en Windows 7 con fines de prueba. El servidor y el cliente SSH funcionan bien hasta que intenté acceder a uno de mis cuadros de AWS EC2 desde esta ventana.

Parece que necesito cambiar el permiso en el archivo de clave privada. Esto se puede hacer fácilmente en unix / linux con el chmodcomando.

¿Qué hay de las ventanas?

private-key.ppm se copia directamente de AWS y supongo que el permiso también.

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
fuente
¿Has intentado modificar la ACL?
Ignacio Vázquez-Abrams
1
¿Su clave privada está realmente en la ruta raíz C: \? Puedo ver por qué se queja, ya que las cosas en C: \ son accesibles para todos. ¿Ha intentado moverlo a una carpeta a la que solo usted como usuario tiene acceso (por ejemplo, C: \ Users \ username \ desktop) y ver si ese mensaje sigue apareciendo?
Darius
@Darius, sí lo es. Cuando copia un archivo de Unix / Linux a Windows, el permiso también se copia. Necesito cambiar esto, pero no estoy seguro de cómo hacerlo en Windows. Esto se puede hacer fácilmente en unix / linux con el comando chmod.
Sabrina
@ IgnacioVazquez-Abrams, ACL? ¿Qué tipo de ACL?
Sabrina
1
@Sabrina Puede usar el comando icacls para cambiar el permiso, o simplemente hacer clic con el botón derecho en la Clave privada y elegir Propiedades y marcar en la pestaña "Seguridad". Y asegúrese de que solo usted / quien pueda acceder a la clave privada solo pueda acceder a ella. Si los "Usuarios" tienen acceso de lectura, significa que cualquiera que tenga acceso al sistema puede leer esa clave privada.
Darius

Respuestas:

119

Ubique el archivo en el Explorador de Windows, haga clic derecho sobre él y luego seleccione "Propiedades". Vaya a la pestaña "Seguridad" y haga clic en "Avanzado".

Cambie el propietario a usted, deshabilite la herencia y elimine todos los permisos. Luego otórguese "Control total" y guarde los permisos. Ahora SSH no se quejará de que el permiso de archivo ya no esté abierto.

Debería terminar luciendo así:

ingrese la descripción de la imagen aquí

iBug
fuente
2
Solo me gustaría agregar 1) Este método funciona en mi 10.0.17134.191cuadro de Windows 10 ( ) con Cygwin ver CYGWIN_NT-10.0-WOW 2.3.1(0.291/5/3) 2015-11-14 12:42y ssh ver OpenSSH_for_Windows_7.6p1, LibreSSL 2.6.4, y 2) ¡Gracias! @iBug!
atreyu
SI el archivo de clave está en la unidad flash / disco flash, ¡esa pestaña de seguridad no está disponible!
Dylan B
@DylanB ¿Por qué pusiste credenciales en una unidad extraíble? (De hecho, esa pestaña está disponible solo en los sistemas de archivos NTFS; puede formatear su unidad en NTFS fácilmente).
iBug
11
En realidad, hice eso y todavía se queja de que los permisos 0777 están demasiado abiertos.
Aaron Bramson
11
¿Por qué es esto tan difícil en Windows? ¿Alguien puede agregar una opción de comando --ignore-stupid-rule?
Liam Mitchell
22

Las claves solo deben ser accesibles para el usuario al que están destinadas y ninguna otra cuenta, servicio o grupo.

  • GUI
    • Propiedades [Archivo] - Seguridad - Avanzado
      1. Establecer propietario para el usuario de la clave
      2. Elimine todos los usuarios, grupos y servicios, excepto el usuario de la clave , en Entradas de permisos
      3. Establecer el usuario de la clave en Control total


  • 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
fuente
¿Qué pasa si el propietario es realmente un grupo? En mi caso, tengo un archivo de propiedad, por network servicelo que Cygwin cree que el permiso es 0770 en lugar de 0700.
hyspace
Un archivo debe ser propiedad de un usuario y un grupo, no solo un grupo. Los permisos de grupo son el tercer octal [el usuario es el segundo] en una especificación de cuatro octales y las claves SSH no pueden ser accesibles en grupo u otros
JW0914
Ese es el caso de Unix. En Windows, network servicepuede poseer un archivo y es un grupo
hyspace
Cygwin permite la funcionalidad de API POSIX en Windows, pero aún funciona bajo las reglas de los programas nativos basados ​​en UNIX (de ahí los permisos octales 3 y 4 en una configuración UGO). Si bien puede abrir un problema en GitHub de Win32-OpenSSH de Microsoft, dado que las claves SSH deben ser grupales y otras inaccesibles , es probable que no sea compatible con la propiedad que describe. Es mejor ajustarse a la norma de un programa que intentar configurarlo de una manera [probable] no compatible.
JW0914
1
Esta debería ser la respuesta correcta. Gracias por las opciones de CLI. La GUI siempre apesta en el caso de Windows.
shyammakwana.me
10

Además de la respuesta proporcionada por ibug. Como estaba usando el sistema ubuntu dentro de Windows para ejecutar el comando ssh. Seguía sin funcionar. Así que lo hice

sudo ssh ...

y luego funcionó

Parv Sharma
fuente
sudono debe utilizarse para abrir una sesión SSH ya que es un riesgo de seguridad. El único momento (al menos que yo sepa) de la cuenta de root se debe utilizar para abrir una sesión SSH es en sistemas de un solo usuario (es decir, normalmente se encuentra en el sistema operativo del enrutador [OpenWrt, DD-WRT, etc.] y otros sistemas integrados) ) . Las claves SSH deben ser accesibles solo para el usuario al que están dirigidas y no para otra cuenta, servicio o grupo.
JW0914
@ JW0914 LOL Tengo un servidor Debian de usuario único y el único usuario (inicio de sesión) es root. No creo que un usuario no root adicional sea beneficioso porque es mi servidor personal e inicio sesión solo cuando realizo trabajos de mantenimiento.
iBug
@iBug Vuelva a leer mi comentario, ya que parece que se perdió por completo la segunda oración ...
JW0914
5

Tuve el mismo problema y parece estar relacionado con la versión de SSH que está ejecutando.

Si escribo

where ssh

Yo obtengo...

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

Cuando corro ssh -Ven ambos lugares, me sale

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

...respectivamente

Entonces, cuando ejecuto sshdesde el directorio git / bin, funciona bien y no se queja de los permisos, pero al ejecutar la misma línea de comando, usando la instalación anterior de SSH, vuelve con esto.

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

PD. los permisos en el archivo son solo acceso completo para mí y nada más.

Rico S
fuente
OpenSSH no debe instalarse en el directorio de Windows por una gran cantidad de razones, desde la seguridad, hasta un inconveniente masivo en caso de que sea necesario reparar un directorio de Windows dañado, ya sea a través de DISMla opción Restablecer (que se ha mejorado para utilizar el directorio WinSxS) versus volver al original install.esd) .
JW0914
Esto es lo que me ayudó, nunca conseguí que la versión ssh de Windows funcionara en este escenario, solo Git's :(
cudacoder
Esta también fue la solución para mí. Parece que Windows 10 Pro ahora incluye una versión agrupada de openssh. Me obligaron a eliminar la carpeta C: \ Windows \ System32 \ OpenSSH y agregar git's ssh.exe a PATH.
Shukri Adams
Esto lo "solucionó" para mí, usando C: \ Archivos de programa \ Git \ usr \ bin \ ssh.exe funciona como C: \ Windows \ System32 \ OpenSSH \ ssh.exe no
smartins
3

Necesitas jsut 2 cosas:

1) Desactivar herencia ingrese la descripción de la imagen aquí

2) Convertir permisos heredados a permisos explícitos ingrese la descripción de la imagen aquí

3) Eliminar grupo de usuarios ingrese la descripción de la imagen aquí

4) Terminará sin que los usuarios puedan acceder a archivos privados, esto debería ser suficiente para agregar id_rsa. ingrese la descripción de la imagen aquí

Artur Mustafin
fuente
2

Tuve un problema similar pero estaba en el trabajo y no tengo la capacidad de cambiar los permisos de archivo en mi computadora de trabajo. Lo que debe hacer es instalar WSL y luego copiar la clave al directorio ssh oculto en WSL:

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

Ahora debería poder modificar los permisos normalmente.

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

Luego ssh usando WSL:

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

JKauffman
fuente
2

use el siguiente comando en su tecla, funciona en Windows

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

Puede usar icacls en Windows en lugar de chmod para ajustar el permiso del archivo. Para dar al usuario actual permiso de lectura y eliminar todo lo demás,

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

Esta es solo una versión con guión de la respuesta de CLI de @ JW0914, por lo que debe votarlo ante todo. Además, es mi primer script de PowerShell, por lo que las sugerencias son bienvenidas.

# 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
fuente
1

Una sola línea en CMD podría hacer el truco (como se describe aquí: https://serverfault.com/a/883338/550334 ), es decir, agregar la clave de stdin en lugar de cambiar los permisos:

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

Para verificar si se ha agregado la clave:

ssh-add -l
majom
fuente
0

Soy un usuario de Windows, utilizo el bash de Windows y seguí todos los pasos para configurar el permiso utilizando la GUI de Windows, y todavía no funciona y se queja:

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

Agregué sudoal frente del comando ssh y simplemente funciona. Espero que esto sea útil para otros.

Alex Ramses
fuente
¿Pero inicias sesión en el servidor como tú mismo o como root?
G-Man dice 'reinstalar a Mónica' el
Ejecuté el terminal de bash de Windows como yo mismo, pero hice 'Ejecutar como administrador' cuando ejecuté el Bash.
Alex Ramses
-1

¡La respuesta de iBug funciona bien! Puedes seguir eso y deshacerte de este problema.

¡Pero hay algunas cosas que deben borrarse ya que enfrenté problemas durante la configuración de los permisos y me tomó unos minutos resolver el problema!

Después de la respuesta de iBug, eliminará todos los permisos, pero ¿cómo se configura el permiso Control total para usted? ahí es donde me quedé atrapado al principio ya que no sabía cómo hacerlo.

Después de deshabilitar la herencia, podrá eliminar todos los usuarios o grupos permitidos.

Una vez hecho esto,

Haga clic en Addy haga clic en Set a Principala continuación, introduzca Systemy Administratorsy your email addredden el campo en el fondo, a continuación, haga clic en check names.

Cargará el nombre si el usuario existe. Luego, haga clic en OK> Tipo Allow> Permisos básicos Full Control>Okay

Esto configurará el permiso de Control total para SYSTEM, Administradores y Su usuario.

Después de eso intente ssh usando esa clave. Debería resolverse ahora.

Tuve el mismo problema y lo resolví usando este método. Si hay algún usuario o grupo con ese nombre, lo cargará.

-Capturas de pantalla-

Entradas de permisos Seleccione un director / Seleccionar usuario o grupos

perezoso
fuente