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

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.


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


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 ec2-user@ec2-198-51-100-1.compute-1.amazonaws.com

Espero que esto ayude a alguien.


¿"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 ec2-user@ec2-99-99-99-99.compute-1.amazonaws.com


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 ubuntu@SERVER.amazonaws.com
Gal Bracha

27

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

ssh -i your.pem root@ec2-XXX-XXX-XXX-XXX.z-2.compute-1.amazonaws.com

donde el nombre es visible en su panel AMI


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.


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

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 ubuntu@ec2-54-69-172-118.us-west-2.compute.amazonaws.com (observe que el usuario es ubuntu)

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


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.


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. Ubuntu@ec2-xxx-xxx-xxx-xxx.region.compute.amazonaws.com). 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.


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


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


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

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ó.


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


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"


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

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 ubuntu@ec2-youraws.amazonaws.com


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 ec2-user@ec2-12-34-56-78.compute-1.amazonaws.com


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í


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 ec2-user@host.com

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 ec2-user@host.com'

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


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.


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}


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

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>

-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í.


-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é


-2

Este error es solo por permiso.

Solo dame el permiso 400

#chmod 400 pemfilepath


permiso demasiado abierto ¡¡malo!!
sheelpriy
Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.