Intentando SSH en una instancia de Amazon Ec2 - error de permiso

745

Esta es probablemente una pregunta estúpidamente simple para algunos :)

Creé una nueva instancia de Linux en Amazon EC2, y como parte de eso descargué el archivo .pem para permitirme ingresar a SSH.

Cuando traté de ssh con:

ssh -i myfile.pem <public dns>

Tengo:

@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
@         WARNING: UNPROTECTED PRIVATE KEY FILE!          @
@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
Permissions 0644 for 'amazonec2.pem' are too open.
It is recommended that your private key files are NOT accessible by others.
This private key will be ignored.
bad permissions: ignore key: amazonec2.pem
Permission denied (publickey).

Después de esta publicación , intenté chmod +600 el archivo pem, pero ahora cuando ssh solo obtengo:

Permission denied (publickey).

¿Qué error de escolar estoy cometiendo aquí? El archivo .pem está en mi carpeta de inicio (en osx). Sus permisos se ven así:

-rw-------@   1 mattroberts  staff    1696 19 Nov 11:20 amazonec2.pem
Matt Roberts
fuente
2
Este error también se produce cuando está utilizando un archivo pem incorrecto.
Rahul Prasad el
También asegúrese de haber creado su instancia DESPUÉS de haber creado y seleccionado el par de claves como la clave designada para usar. Hice esto al revés.
Gary
Estoy en Windows con WinSCP. No tiene nada que ver con los chmod 400 myfile.pemusos myfile.ppkgenerados por PuTTYgen a partir del archivo pem.
Chetabahana
Este error también puede ocurrir cuando no está iniciando sesión con el usuario correcto;)
andrea06590

Respuestas:

1463

El problema es tener un mod incorrecto en el archivo.

Resuelto fácilmente ejecutando -

chmod 400 mykey.pem

Tomado de las instrucciones de Amazon:

Su archivo de clave no debe ser visible públicamente para que SSH funcione. Use este comando si es necesario: chmod 400 mykey.pem

400 lo protege haciéndolo de solo lectura y solo para el propietario.

Kof
fuente
3
¡Muchas gracias! ¿Qué hace chmod 400? a mykey.pem?
Costa
19
400 lo protege haciéndolo de solo lectura y solo para el propietario.
Kof
1
Después de esto recibo "Advertencia: el archivo de identidad blabla.pem no es accesible: no existe tal archivo o directorio" cuando hago ssh -l USERNAME_HERE -i .ssh / yourkey.pem public-ec2-host.
coolcool1994
3
Este comando + ssh -i YOUR_PEM_FILE.pem ec2-user@YOUR_IPsolucionó el problema. Quizás esta debería ser la respuesta aceptada ...
c4k
1
¿Cómo puedo ejecutar lo mismo para Windows?
Ahsan Mukhtar
262

Es probable que esté utilizando un nombre de usuario incorrecto para iniciar sesión:

  • la mayoría de las imágenes de Ubuntu tienen un usuario ubuntu
  • El AMI de Amazon es ec2-user
  • la mayoría de las imágenes de Debian tienen rootoadmin

Para iniciar sesión, debe ajustar su comando ssh:

ssh -l USERNAME_HERE -i .ssh/yourkey.pem public-ec2-host

HTH

Hasta
fuente
30
o ssh -i key.pem ubuntu @ servername
jsh
43
El mensaje de error lo dice todo: el archivo .pem cert no está lo suficientemente protegido. Haga chmod 400 xyz.pem como se sugiere a continuación.
allprog
1
@allprog para mí esto solo hace que diga Permission denied (publickey).y nada más ...
Aram Kocharyan
1
Encontré el problema: no estaba usando la misma clave con la que creé la instancia
Aram Kocharyan el
12
Esta no es la solución: los permisos de archivo en el archivo de clave descargado son 844 de forma predeterminada. debería ser 400 chmod 500 <path_to_pem_file>debería hacerlo.
Elad Meidar
62

Sé que es muy tarde para el juego ... pero esto siempre funciona para mí:

paso 1

ssh-add ~/.ssh/KEY_PAIR_NAME.pem

paso 2, simplemente ssh en :)

ssh user_name@<instance public dns/ip>

p.ej

ssh [email protected]

Espero que esto ayude a alguien.

usuario2838357
fuente
¿"ssh-add" es lo mismo que copiar el archivo * .pem a la carpeta ~ / .ssh?
ア レ ッ ク ス
1
>> simplemente copiar el archivo * .pem a la carpeta ~ / .ssh no es lo mismo, debe agregar a la carpeta y luego ejecutar el comando ssh-add.
super_p
Muy tarde en el juego, pero para agregar algunas aclaraciones ... 1. agregue el archivo .pem al directorio ~ / .ssh (créelo si es necesario), 2. use el comando ssh-add para agregar la identidad a la autenticación agente; esto significa nunca tener que especificar el archivo .pem cuando se usa ssh
Ian Atkin
2
Después de ssh-add ¬ / .ssh / key.pem; Obteniendo el error No se pudo abrir una conexión con su agente de autenticación. eval ssh-agent -sinforma SSH_AGENT_PID = 3409; ssh-add da el mismo error que el anterior ......... Cualquier ayuda aquí por favor
Tariq
Wow, eso sería muy conveniente para todas mis futuras conexiones con mi VPS. Gracias amigo :)
Ahmad Mushtaq
36

Ok hombre, lo único que funcionó para mí fue:

  1. Cambiar los permisos de la clave

    chmod 400 mykey.pem

  2. Asegúrese de iniciar sesión con ec2-user y la dirección correcta ec2-99 ... La dirección ec2-99 se encuentra en la parte inferior de la consola de aws cuando inicia sesión y ve su instancia en la lista

    ssh -i mykey.pem [email protected]

bobobobo
fuente
No puedo encontrar la dirección ec2-99. ¿Podrías ayudarme?
Adil Malik
1
chmod 400 mykey.pem inicie sesión con ubuntu de la siguiente manera: ssh -i mykey.pem [email protected]
Gal Bracha
27

Echa un vistazo a este artículo . No utiliza el DNS público sino el formulario.

ssh -i your.pem [email protected]

donde el nombre es visible en su panel AMI

renick
fuente
Saludos para el artículo, muy útil!
Matt Roberts el
Mejora menor: al intentar iniciar sesión como root aws aparece lo siguiente: "Inicie sesión como usuario ec2-user en lugar de usuario root".
Andre Schweighofer
¿Cómo puedo saber cuál es mi ec2-XXX-XXX-XXX-XXX.z-2.compute-1.amazonaws.com?
ア レ ッ ク ス
Consola de administración> EC2> Instancias y seleccione su instancia.
renick
La 'raíz @' es lo que todos los demás faltan en esta respuesta. ¡El tuyo ayudó! Eso y chmod.
lordB8r
13

En Windows, puede ir a las propiedades del archivo pem, ir a la pestaña de seguridad y luego avanzar al botón.

eliminar la herencia y todos los permisos. entonces concédete el control total. después de todo, SSL no le dará el mismo error nuevamente.

Nadeeshan Herath
fuente
7

Sé que esta pregunta ya ha sido respondida, pero para aquellos que los han probado todos y todavía están recibiendo el molesto "Permiso denegado (clave pública)". Intenta ejecutar tu comando con SUDO. Por supuesto, esta es una solución temporal y debe establecer los permisos correctamente, pero al menos eso le permitirá identificar que su usuario actual no se está ejecutando con los privilegios que necesita (como asumió)

sudo ssh -i amazonec2.pem ec2-xxx-xxx-xxx-xxx.us-west-2.compute.amazonaws.com

Una vez que haga esto, recibirá un mensaje como este:

Please login as the user "ec2-user" rather than the user "root"

Que también está escasamente documentado. En ese caso solo haz esto:

sudo ssh -i amazonec2.pem ec2-xxx-xxx-xxx-xxx.us-west-2.compute.amazonaws.com -l ec2-user

Y obtendrás lo glorioso:

   __|  __|_  )
   _|  (     /   Amazon Linux AMI
  ___|\___|___|
Ricardo Cid
fuente
2
Gracias ... Todavía recibía un error después de probar todas las opciones mencionadas anteriormente. Ejecutar ssh con sudo funcionó para mí.
Gursharan Singh
Me gustaría saber por qué tengo que ejecutar esto en sudo. Intenté chmod 400 xyz.pem, pero no ayudó.
Samuel Dominguez
6

En la terminal Mac, hacer "chmod 400 xyz.pem" no me ayudó, seguía diciendo que el permiso había sido denegado. Para usuarios de ubuntu sugeriría

  1. ssh-add xyz.pem
  2. ssh -i xyz.pem [email protected] (observe que el usuario es ubuntu)
Himalay Majumdar
fuente
4

Las mejores prácticas de claves SSH y permisos de archivos:

  • Directorio .ssh - 0700 (solo por el propietario)
  • clave privada / archivo .pem - 0400 (solo lectura del propietario)
  • clave pública / archivo .pub - 0600 (lectura y escritura solo por el propietario)

    chmod XXXX file/directory

Ryan
fuente
3

ssh -i /.pem usuario @ host-machine-IP

Creo que se debe a que ha ingresado credenciales incorrectas o está utilizando una clave pública en lugar de una clave privada o sus permisos de puerto están abiertos para que TODOS los usen. Esto es malo para Amazon.

Syed Priom
fuente
3

Inicio de sesión alternativo con PuTTY. Es bueno pero necesita unos pocos pasos.

  1. Obtenga su .pem que se generó cuando realizó por primera vez la instancia EC2.
  2. Convierta el archivo .pem .ppk usando PuttyGen ya que PuTTY no lee .pem.
  3. Abra PuTTY e ingrese su Nombre de host, que es su nombre de usuario de instancia + DNS público (Ej. [email protected]). No es el nombre de usuario de su cuenta de AWS.
  4. Luego navegue a Conexión> SSH> Auth . Luego agregue su archivo .ppk . Haga clic en Examinar donde dice "Archivo de clave privada para autenticación" .
  5. Haga clic en Abrir y debería poder establecer la conexión inmediatamente.

Estoy usando PuTTY 0.66 en Windows.

Jarvis
fuente
Esto funciona, pero ¿hay alguna manera de hacer que la conexión ssh funcione directamente desde la línea de comandos?
Ariel
3

Además de las otras respuestas, esto es lo que hice para que esto funcione:

  • Copie la clave a la carpeta .ssh si aún no lo hizo:

cp key.pem ~/.ssh/key.pem

  • Dar los permisos adecuados a la clave

chmod 400 ~/.ssh/key.pem

eval `ssh-agent -s` ssh-add

  • Luego, agregue la clave

ssh-add ~/.ssh/key.pem

Ahora debería poder ssh EC2 (:

Rodrigo Nantes
fuente
2

Haga un chmod 400 yourkeyfile.pem Si su instancia es Amazon linux, use ssh -i yourkeyfile.pem ec2-user @ ip para ubuntu ssh -i yourkeyfile.pem ubuntu @ ip para centos ssh -i yourkeyfile.pem centos @ ip

sathee005
fuente
2

Puede haber tres razones detrás de este error.

  1. Estás usando una clave incorrecta.
  2. Su clave no tiene los permisos correctos. Necesitas cambiarlo a 400.
  3. Estás utilizando el usuario incorrecto. Las imágenes de Ubuntu tienen un usuario ubuntu , el AMI de Amazon es ec2-user y las imágenes de Debian tienen root o admin
Jagatveer Singh
fuente
2

El problema para mí fue que mi archivo .pem estaba en una de mis particiones NTFS. Lo moví a mi partición de Linux (ext4).

Dio los permisos requeridos ejecutando:

chmod 400 my_file.pem

Y funcionó.

Rishabh Agrahari
fuente
2

Bueno, mirando la descripción de tu publicación, siento que hay 2 errores cometidos por ti:

  1. Establezca los permisos correctos para la clave privada . El siguiente comando debería ayudarlo a configurar el permiso de archivo correcto.

    chmod 0600 mykey.pem

  2. Usuario ec2 incorrecto que está intentando iniciar sesión .

    Mirando su registro de depuración, creo que ha generado una instancia de Amazon Linux. El usuario predeterminado para ese tipo de instancia es ec2-user. Si la instancia hubiera sido ubuntu, entonces su usuario predeterminado habría sido ubuntu.

    ssh -i privatekey.pem default_ssh_user@server_ip

Note:
   For an Amazon Linux AMI, the default user name is ec2-user.

   For a Centos AMI, the default user name is centos.

   For a Debian AMI, the default user name is admin or root.

   For a Fedora AMI, the default user name is ec2-user or fedora.

   For a RHEL AMI, the default user name is ec2-user or root.

   For a SUSE AMI, the default user name is ec2-user or root.

   For an Ubuntu AMI, the default user name is ubuntu.

   Otherwise, if ec2-user and root don't work, check with the AMI provider.

fuente: https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/AccessingInstancesLinux.html

Prabuddha Chakraborty
fuente
1

Lista de Verificación:

  1. ¿Está utilizando el archivo .pem de clave privada correcto?

  2. ¿Sus permisos están configurados correctamente? (Las AMI de mi marca Amazon funcionan con 644, pero Red hat debe tener al menos 600 o 400. No sé sobre Ubuntu).

  3. ¿Está utilizando el nombre de usuario correcto en su línea ssh? Amazon-branded = "ec2-user", Red Hat = "root", Ubuntu = "ubuntu". El usuario se puede especificar como "ssh -i pem usename @ hostname" O "ssh -l username -i pem hostname"

Fivedogit
fuente
1

Simplemente cambie el permiso del archivo pem a 0600 permitiendo solo para el usuario permitido y funcionará de maravilla.

sudo chmod 0600 myfile.pem

Y luego intente ssh funcionará perfectamente.

ssh -i myfile.pem <<ssh_user>>@<<server>>
Prash
fuente
1

Por permiso predeterminado no se permite la clave pem. Solo tienes que cambiar el permiso:

chmod 400 xyz.pem

y si la instancia de ubuntu se conecta usando:

ssh -i xyz.pem [email protected]

rahul kumar
fuente
1

El archivo de clave no debe ser visible públicamente, así que use el permiso 400

chmod 400 keyfile.pem

Si el comando anterior muestra un error de permiso, use

sudo chmod 400 keyfile.pem

Ahora ssh en la máquina ec2, si aún enfrenta el problema, use ec2-user

ssh -i keyfile.pem [email protected]

singh30
fuente
1

.400 lo protege haciéndolo de solo lectura y solo para el propietario.
Puede encontrar la respuesta en la guía ASW.

chmod 400 yourPrivateKey.pem

ingrese la descripción de la imagen aquí

Zgpeace
fuente
0

Los siguientes son los pasos simples para que el usuario de Linux se conecte con el servidor usando el archivo .pem:

Paso 1: a la ubicación del archivo pem y cópielo a la ubicación de inicio .ssh.

cp example.pem ~/.ssh/example.pem

Paso 2: cambiar el permiso

chmod 400 ~/.ssh/example.pem

Paso 3: ejecuta el siguiente comando

ssh -i ~/.ssh/example.pem [email protected]

Como este comando es demasiado largo, debería crear el alias usando los siguientes comandos:

 vim ~/.bashrc

Escriba el mismo comando de la siguiente manera al final.

alias sshConnect='ssh -i ~/.ssh/example.pem [email protected]'

Ahora reinicie su sistema y úselo sshConnectpara conectarse con su servidor.

Ajai
fuente
0

Es solo un problema de permiso con su clave aws pem.

Simplemente cambie el permiso de pem key a 400 usando el siguiente comando.

chmod 400 pemkeyname.pem

Si no tiene permiso para cambiar el permiso de un archivo, puede usar sudo como el siguiente comando.

sudo chmod 400 pemkeyname.pem

Espero que esto funcione bien.

Deepak N
fuente
0

He visto dos razones detrás de este problema.

1) la clave de acceso no tiene el permiso correcto. Las teclas pem con permiso predeterminado no pueden establecer una conexión segura. Solo tienes que cambiar el permiso:

chmod 400 xyz.pem

2) Compruebe también si ha iniciado sesión con las credenciales de usuario adecuadas. De lo contrario, use sudo mientras se conecta

sudo ssh -i {keyfile} ec2-user @ {dirección IP del host remoto}

Abhijit Barua
fuente
0

Su clave no debe ser públicamente visible para que SSH funcione. Use este comando si es necesario:

chmod 400 Interview-apps.pem

Connect to your instance using its Public DNS:

ec2-**-***-***-***.us-west-2.compute.amazonaws.com

Ejemplo:

ssh -i "Interview-apps.pem" ec2-user@ec2-**-***-***-***.us-west-2.compute.amazonaws.com
BigData-Guru
fuente
0

Ignore esta respuesta si es irrelevante para usted, pero según mi experiencia, he visto personas con problemas Permission denied (publickey)porque simplemente pegaron su clave pública (en una máquina de destino) sin la primera letra .

Esto sucede cuando se usa vim para editar (pegar) la clave. Dado que vim se abre por defecto en el modo de comando (no en un modo de inserción ), pegar la tecla sin cambiar a un modo de inserción (es decir i) dará como resultado omitir la primera sletra, por ejemplo, en lugar de

ssh-rsa <key>

terminas pegando

sh-rsa <key>

¡Así que antes de probar otras soluciones, vea si ha pegado la clave correctamente ! es decir

cat ~/.ssh/id_rsa.pub

Solo si está seguro, realice los siguientes pasos; intentar ssh en un modo detallado (es decir, una bandera -v) podría indicarle el problema real:

ssh -v -i <private_key> <name>@<ip> -p <port>

Como nota al margen, como ya se ha mencionado aquí por otros, en la mayoría de los casos, iniciar un agente ssh vacío (programa que mantiene sus claves en la memoria) y agregar su clave debería resolver el problema:

ssh-agent bash
ssh-add <private_key>
Tomasz Bartkowiak
fuente
-1

Lo que solucionó esto para mí fue mover el archivo .pem dentro del directorio de aplicaciones. Soo dice que fooapp es el nombre de mi aplicación. Lo puse directamente allí.

Nick Res
fuente
-2

A veces puede haber un error en la carpeta. No se por que...

Puede cambiar la carpeta e intentar nuevamente. Por ejemplo, puede experimentar en las carpetas habituales (Escritorio, Descargas, etc.).

Probé este método y trabajé

Rustem Hesenov
fuente
-2

Este error es solo por permiso.

Solo dame el permiso 400

#chmod 400 pemfilepath

Viraj Wadate
fuente
permiso demasiado abierto ¡¡malo!!
sheelpriy