Error de ssh "los permisos están demasiado abiertos"

2056

Tuve un problema con mi Mac donde ya no podía guardar ningún tipo de archivo en el disco. Tuve que reiniciar OSX lion y restablecer los permisos en archivos y acls.

Pero ahora, cuando quiero confirmar un repositorio, recibo el siguiente error de ssh:

Permissions 0777 for '/Users/username/.ssh/id_rsa' are too open.
It is recommended that your private key files are NOT accessible by others.
This private key will be ignored.

¿Qué niveles de permisos debo otorgar al archivo id_rsa?

Yannick Schall
fuente
21
Gracias por hacer la pregunta. Una mejor experiencia sería para quien escribió este mensaje de error sugerir algunas configuraciones válidas (como 600 o 400 como se sugiere a continuación). ¡Los programadores que no escriben mensajes de error lo suficientemente completos que son útiles nos han torturado a todos durante años!
George Pligoropoulos
FWIW, esto está relacionado con la StrictModeshabilitación en el sshdservidor, desde la página del manual : "StrictModes Especifica si sshd (8) debe verificar los modos de archivo y la propiedad de los archivos del usuario y el directorio de inicio antes de aceptar el inicio de sesión". - puede deshabilitar esto, sin embargo no se sugiere.
masseyb

Respuestas:

3475

Las claves solo deben ser legibles por usted:

chmod 400 ~/.ssh/id_rsa

Si necesita escribir y escribir en Keys:

chmod 600 ~/.ssh/id_rsa

600 parece estar bien también (de hecho, mejor en la mayoría de los casos, porque no necesita cambiar los permisos de archivo más tarde para editarlo).

La parte relevante de la página de manual ( man ssh)

 ~/.ssh/id_rsa
         Contains the private key for authentication.  These files contain sensitive 
         data and should be readable by the user but not
         accessible by others (read/write/execute).  ssh will simply ignore a private 
         key file if it is              
         accessible by others.  It is possible to specify a
         passphrase when generating the key which will be used to encrypt the sensitive 
         part of this file using 3DES.

 ~/.ssh/identity.pub
 ~/.ssh/id_dsa.pub
 ~/.ssh/id_ecdsa.pub
 ~/.ssh/id_rsa.pub
         Contains the public key for authentication.  These files are not sensitive and 
         can (but need not) be readable by anyone.
quickshiftin
fuente
300
400 es demasiado bajo ya que eso hace que tu propio usuario no pueda escribirlo. 600 se recomienda realmente ya que permite que el propietario lea y escriba no solo lea.
jfreak53
8
Descubrí que hay momentos en los que 400 es relevante. Suponga que tiene un archivo autorizado_keys que tiene configuradas las funciones no-pty et al . Si el archivo es grabable, ¡el usuario puede realmente sobrescribir el archivo autorizado_claves y obtener acceso interactivo al shell! Algo a tener en cuenta, aunque seguramente no es el caso general para la mayoría de las personas.
quickshiftin
17
AWS realmente recomienda el permiso 400 en su sitio web. Eso es lo que hice en OS X y funcionó.
George Mylonas el
55
Esto definitivamente funciona y es más seguro. El único inconveniente es que tienes que cambiarlo a 600 para editar. Para id_rsa e id_rsa.pub, dudo que eso importe porque rara vez editará esos archivos, pero para claves autorizadas, podría ser molesto. Es mejor comprender las compensaciones y configurar cada sistema de manera adecuada.
quickshiftin
3
Supongo que también depende de la frecuencia con la que los edites. Mucha gente lo configura y lo olvida, por lo tanto 400 estaría más seguro de los demás y de sus propias acciones; modificando a 600 cuando sea necesario. Si es parte de su flujo de trabajo y su ssh-savy, entonces tal vez sería más un obstáculo seguir cambiando los permisos.
vol7ron
99

Usando Cygwin en Windows 8.1, es necesario ejecutar un comando:

Usuarios de chgrp ~ / .ssh / id_rsa

Entonces la solución publicada aquí se puede aplicar, 400 o 600 está bien.

chmod 600 ~ / .ssh / id_rsa

Ref: http://vineetgupta.com/blog/cygwin-permissions-bug-on-windows-8

tanza9
fuente
8
dependiente de la localidad. Tuve que ejecutar "chgrp Użytkownicy ~ / .ssh / id_rsa" ya que "Usuarios" no cometió ningún error en ese grupo.
Marcos
Tenía que hacer esto también. Mi directorio cygwin estaba en la ubicación predeterminada ( C:\cygwin64), por lo que probablemente heredó los permisos. Es extraño que esto no haya sucedido en otras computadoras portátiles que he tenido.
Zach Thacker
3
@Marcos He agregado una respuesta que funciona independientemente de la configuración regional: stackoverflow.com/a/28647713/67013
thehouse
44
Windows 10. Usó el segundo comando solamente. Trabajado como un encanto.
StalkAlex
Tenga en cuenta que para instalaciones en idiomas alternativos, el grupo 'Usuarios' tiene identificadores alternativos.
John Rumpel
43

La solución independiente de la configuración regional que funciona en Windows 8.1 es:

chgrp 545 ~/.ssh/id_rsa
chmod 600 ~/.ssh/id_rsa

GID 545 es un ID especial que siempre se refiere al grupo 'Usuarios', incluso si su localidad usa una palabra diferente para Usuarios.

la casa
fuente
31

0600 es en lo que está configurado el mío (y está funcionando)

Devin Ceartas
fuente
24

AFAIK los valores son:

700 para el directorio oculto ".ssh" donde se encuentra el archivo de clave

600 para el archivo de claves "id_rsa"

ajaaskel
fuente
19

Tengo el error en mi Windows 10, así que configuré el permiso de la siguiente manera y funciona.

Permiso para id_rsa de windows 10

En detalles, elimine otros usuarios / grupos hasta que solo tenga 'SISTEMA' y 'Administradores'. Luego agregue su inicio de sesión de Windows con permiso de lectura solamente.

Tenga en cuenta que el id_rsaarchivo está debajo de la c:\users\<username>carpeta.

Supawat Pusavanno
fuente
Tengo el mismo problema en Win-10. Según su explicación, no está claro qué permitió y negó realmente: tengo "usuarios" y "usuarios autenticados" y No "usuario específico" como opciones + Sistema y Administradores. Además, no pude entender cygwin - para instalar o usar. (?)
Sam-T
2
para Win10 necesita mover su llave a la casa del usuario, esto funcionó perfectamente. Intenté dar el camino completo a la clave y jugar con los permisos, nada funcionó.
Sam-T
@ Sam-T si no puede ver su nombre en la lista, puede agregar presionando y Edit...luego presionando Add...luego escriba su nombre en el cuadro de texto y "Enter the object names to select"luego presione el Check Namesbotón (y presione OKy otro OK), luego su nombre debe aparecer en la Securitypestaña
Supawat Pusavanno
Probablemente pueda agregar el nombre específicamente, según sus instrucciones. Pero mi pregunta principal era: qué permisos exactos para Denegar y Permitir para todos . Mientras tanto, como se mencionó, pude resolver el problema simplemente agregando .pemelmyuser directory
Sam-T
16

Hay una excepción al requisito de permisos "0x00" en una clave. Si la clave pertenece a un usuario root y pertenece a un grupo con usuarios, entonces puede ser "0440" y cualquier usuario de ese grupo puede usar la clave.

Creo que esto funcionará con cualquier permiso en el conjunto "0xx0" pero no he probado todas las combinaciones con cada versión. He intentado 0660 con 5.3p1-84 en CentOS 6, y el grupo no es el grupo primario del usuario sino un grupo secundario, y funciona bien.

Esto normalmente no se haría para la clave personal de alguien, sino para una clave utilizada para la automatización, en una situación en la que no desea que la aplicación pueda meterse con la clave.

Se aplican reglas similares a las restricciones de directorio .ssh.

syberghost
fuente
15

proporcionar 400 permisos, ejecutar debajo del comando

chmod 400 /Users/username/.ssh/id_rsa

ingrese la descripción de la imagen aquí

Sujit Dhamale
fuente
¡estupendo! Esto resolvió mi problema. ¡Gracias!
Emanuela Colta
11

En Windows 10, chmod y chgrp de cygwin no fueron suficientes para mí. Tuve que hacer clic derecho en el archivo -> Propiedades -> Seguridad (pestaña) y eliminar todos los usuarios y grupos, excepto mi usuario activo.

Playa Jared
fuente
Esta es la única solución que funciona :) Gracias, me ahorró tiempo
Atul
Descubrí que, después de hacer esto, también podía hacer ssh desde el símbolo del sistema normal de Windows. No es necesario usar Cygwin. ¡Excelente!
Atul
8

Esto es lo que funcionó para mí (en Mac)

sudo chmod 600 path_to_your_key.pem 

entonces :

ssh -i path_to_your_key user@server_ip

Espero que ayude

lansanalsm
fuente
5

que funciono para mi

Carpeta de usuarios de chgrp

CARPETA chmod 600

Jerome Ansia
fuente
chgrp: grupo inválido: «Usuarios»
Lo intenté pero sigo tirando 'grupo no válido': Usuarios '', ¿por qué? usando Windows 10, powershell
Jason Goal
4

Tengo el mismo problema después de la migración desde otro mac. Y bloqueó conectar github por mi llave.

Restablezco el permiso como se muestra a continuación y ahora funciona bien.

chmod 700 ~/.ssh     # (drwx------)
cd ~/.ssh            
chmod 644 *.pub      # (-rw-r--r--)
chmod 600 id_rsa     # (-rw-------)
Jeff Gu Kang
fuente
4

Windows 10 ssh en Ubuntu EC2 error de "permisos demasiado abiertos" en AWS

Tuve este problema al intentar ingresar a una instancia de Ubuntu EC2 usando el archivo .pem de AWS.

En Windows, esto funcionó cuando puse esta clave en un creado bajo la carpeta .ssh

C:\Users\USERNAME\.ssh\private_key

Para cambiar la configuración de permisos en Windows 10:

Configuración de archivo> Seguridad> Avanzado

Deshabilitar herencia

Convierta permisos heredados en permisos explícitos

Eliminar todas las entradas de permisos, excepto los administradores

Entonces podría conectarse de forma segura.

lm5050
fuente
4

Para mí (usando el Subsistema de Ubuntu para Windows) el mensaje de error cambió a:

 Permissions 0555 for 'key.pem' are too open

después de usar chmod 400. Resulta que el motivo fue usar root como usuario predeterminado.

Cambie esto usando el cmd:

 ubuntu config --default-user your_username
Daniel Kettemann
fuente
3

Mensaje interesante aquí. Los sistemas operativos son lo suficientemente inteligentes como para negar conexiones remotas si su clave privada está demasiado abierta. Entiende el riesgo de que los permisos para id_rsa estén abiertos (leer, cualquiera puede editarlos).

{Uno puede cambiar su cerradura primero y luego abrirla con las llaves que ya tiene}

cd ~/.ssh
chmod 400 id_rsa

Mientras trabajamos en los servidores múltiples (no producción), la mayoría de nosotros sentimos la necesidad de conectar un servidor remoto con ssh. Una buena idea es tener un código de nivel de aplicación (puede ser Java usando jsch) para crear confianzas ssh entre servidores. De esta manera, la conexión será sin contraseña. En caso de que perl esté instalado, también se puede usar el módulo net ssh.

Piyush Baijal
fuente
1

Me encontré con este error mientras jugaba con Ansible. He cambiado los permisos de la clave privada a 600 para resolver este problema. ¡Y funcionó!

chmod 600 .vagrant/machines/default/virtualbox/private_key
vildhjarta
fuente
1

Intenté 600 niveles de permiso para mi clave privada y funcionó para mí. chmod 600 privateKey [dev] $ ssh -i privateKey user @ ip trabajado

chmod 755 privateKey [dev] $ ssh -i privateKey user @ ip estaba dando el siguiente problema: Los permisos 0755 para 'privateKey' están demasiado abiertos. Se requiere que sus archivos de clave privada NO sean accesibles por otros. Esta clave privada será ignorada. Cargar clave "privateKey": malos permisos

deepu kumar singh
fuente
0
I have got the similar issue when i was trying to login to remote ftp server using public keys..        
To solve this issue initially i have done the following process
    Primero encuentre la ubicación de las claves públicas porque cuando intenta iniciar sesión en ftp utilizando esta clave pública. primero necesitamos crear una clave y establecemos que los permisos de esa clave sean 600.
            Asegúrate de estar en la ubicación correcta.
            paso 1:
            ir a la ubicación correcta
            paso 2:
            Después de que estés en la ubicación correcta
 mando: 
     chmod 600 id_rsa

        This has solved my issue.
Ravi Teja Mureboina
fuente
-1

Estoy usando VPC en EC2 y recibí los mismos mensajes de error. Noté que estaba usando el DNS público. ¡¡Cambié eso al DNS privado y vola !! funcionó...

usuario3195783
fuente
Amazon recomienda chmod 400 y el uso del DNS público. Consulte la documentación aquí: docs.aws.amazon.com/AWSEC2/latest/UserGuide/…
ddri
-2

para Win10 necesita mover su clave al directorio de inicio del usuario para linuxlike os necesita chmod a 700 like o 600 etc.

Fedulov Oleg
fuente
para Win10 necesita mover su llave a la casa del usuario, esto funcionó perfectamente. Intenté dar la ruta completa a la clave y jugar con los permisos, no funcionó.
Sam-T