Se muestran los errores «Permission denied (publickey)» o «Authentication failed, permission denied» cuando intento acceder a mi instancia de EC2. ¿Cómo puedo solucionarlo?

8 minutos de lectura
0

Se muestran los errores «Permission denied (publickey)» o «Authentication failed, permission denied» cuando accedo a mi instancia de Amazon Elastic Compute Cloud (Amazon EC2).

Breve descripción

Los errores «Permission denied (publickey)» y «Authentication failed, permission denied» se producen cuando:

  • Está intentando conectarse con un nombre de usuario incorrecto para su AMI.
  • Los permisos de archivo del sistema operativo son incorrectos en la instancia.
  • El archivo de clave pública SSH (.pub) en el archivo authorized_keys es incorrecto.

Solución

Comprobación de si se está utilizando el nombre de usuario correcto para su AMI

Para obtener una lista de nombres de usuario válidos, consulte Error: Server refused our key o No supported authentication methods available.

Comprobación de si la clave pública SSH en el archivo authorized_keys y los permisos de archivo en el sistema operativo son correctos

Existen cuatro métodos para realizar estas tareas:

Método 1: Utilización de la consola serie de EC2

Si ha activado la consola serie de EC2 para Linux, puede usarla para solucionar problemas de tipos de instancia basados en Nitro compatibles. La consola serie le ayuda a solucionar problemas de arranque, configuración de red y configuración de SSH. La consola serie se conecta a su instancia sin necesidad de tener una conexión de red operativa. Puede acceder a la consola serie mediante la consola de Amazon EC2 o la Interfaz de la línea de comandos de AWS (AWS CLI).

Antes de utilizar la consola serie, debe concederle acceso en el nivel de cuenta. Cree políticas de AWS Identity and Access Management (IAM) que concedan acceso a sus usuarios de IAM. Además, cada instancia que use la consola serie debe incluir al menos un usuario con contraseña. Si no puede alcanzar la instancia y no ha configurado el acceso a la consola serie, siga las instrucciones de los métodos 2, 3 o 4. Para obtener más información sobre cómo configurar la consola serie de EC2 para Linux, consulte Configurar el acceso a la consola serie de EC2.

Nota: Si se muestran errores al ejecutar comandos de AWS CLI, compruebe si está utilizando la versión más reciente de AWS CLI.

Método 2: Utilización del Administrador de sesiones de AWS Systems Manager para iniciar sesión en la instancia y realizar correcciones

Este método actualiza los permisos e inyecta su clave pública SSH en el archivo authorized_keys.

**Nota:**Para utilizar este método es necesario instalar el Agente de SSM. Para obtener más información sobre el Administrador de sesiones y una lista completa de los requisitos previos, consulte Setting up Session Manager.

1.    Abra la consola de AWS Systems Manager.

2.    Inicie una sesión.

3.    Utilice el comando ls -ld para comprobar si los permisos de los archivos del directorio home son correctos. A continuación, se muestra una lista de los permisos correctos:

  • El directorio principal de Linux, /home, por ejemplo, debería ser (0755/drwxr-xr-x).
  • El directorio principal del usuario, /home/ec2-user/, por ejemplo, debería ser (0700/drwx------).
  • El permiso del directorio .ssh, /home/ec2-user/.ssh, por ejemplo, debería ser (0700/drwx------).
  • El permiso del archivo authorized_keys, /home/ec2-user/.ssh/authorized_keys, por ejemplo, debería ser (0600/-rw-------).

A continuación, se muestra un ejemplo del comando ls -ld y del resultado. En este ejemplo, ec2-user es el nombre de usuario. Cambie el nombre de usuario según su AMI específica.

$ ls -ld /home/ec2-user/
drwx------ 3 ec2-user ec2-user 4096 Apr  1 08:31 /home/ec2-user/

4.    En su equipo local, verifique la clave pública SSH.

5.    Si la firma de la clave pública SSH no aparece en el resultado, actualice el archivo authorized_keys para permitir su clave SSH. En el siguiente ejemplo, reemplace la clave de ejemplo por su clave pública SSH.

$ echo 'ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABAQDVogCW5eZogRp+vF6Ut360b0bYyTmqgYaCXOyiW77I916AS5jFL3zsCtONbGn4hnG/UGGWXpLfUV85qpVJb38fskPZNuyZtjGjXM2W7qqbCZ1N9HBb6IPBaL97tmqBi+8rD7mSkoHc40sIV+KxkQSvD6AAFjQruCjxzfGIApnOvuj6IMsVEuFHBx4QhkbCzafxo02D9BZT4+dMy7tmyuC+UiNEQpgfFoszl+4VNFTIPlQQyn6CpUiV/rFXIadXsHqc+UOdVnfEXP+30YL75RHabze/1F5MY6t94AEcmcb05Dq4vwN9IjcxKmwgvxLOXzryytepvHQU+PobBEXAMPLE' >> /home/ec2-user/.ssh/authorized_keys

6.    Para corregir los permisos, ejecute los siguientes comandos en la instancia de EC2.

$ sudo chown root:root /home
$ sudo chmod 755 /home
$ sudo chown ec2-user:ec2-user /home/ec2-user -R
$ sudo chmod 700 /home/ec2-user /home/ec2-user/.ssh
$ sudo chmod 600 /home/ec2-user/.ssh/authorized_keys

7.    Finalice la sesión.

8.    Conéctese a la instancia mediante SSH.

Método 3: Ejecución del procedimiento de automatización AWSSupport-TroubleshootSSH Automation

AWSSupport-TroubleshootSSH instala la herramienta Amazon EC2Rescue. Después de la instalación, la herramienta comprueba y corrige algunos problemas que provocan errores de conexión remota al conectarse a un equipo Linux a través de SSH. Para obtener más información, consulte ¿Cómo puedo utilizar el flujo de trabajo de automatización AWSSupport-TroubleshootSSH para solucionar problemas de conexión de SSH?

Método 4: Utilización de un script de datos de usuario para reparar los permisos de SSH y agregar la clave pública SSH correcta al archivo authorized_keys

Importante

  • Si su instancia se basa en un almacén de instancias o tiene volúmenes de almacén de instancias que contienen datos, los datos se perderán cuando se detenga la instancia. Para obtener más información, consulte Determinar el tipo de dispositivo raíz de la instancia.
  • Si la instancia forma parte de un grupo de Amazon EC2 Auto Scaling, podría terminarla si la detiene. Las instancias lanzadas con Amazon EMR, AWS CloudFormation o AWS Elastic Beanstalk pueden formar parte de un grupo de AWS Auto Scaling. La terminación de la instancia en este escenario depende de la configuración de protección frente al escalado descendiente de las instancias del grupo de escalamiento automático. Si la instancia forma parte de un grupo de escalamiento automático, elimínela temporalmente del grupo de escalamiento automático antes de iniciar los pasos para solucionar el problema.
  • Al detener e iniciar la instancia, su dirección IP pública cambiará. Se recomienda utilizar una dirección IP elástica en lugar de una dirección IP pública para enrutar el tráfico externo hacia la instancia.

1.    Abra la consola de Amazon EC2.

2.    Elija Instancias en el panel de navegación y, a continuación, seleccione la instancia que está intentando lanzar.

3.    Detenga la instancia.

4.    Elija Acciones, Configuración de la instancia, Editar datos de usuario.

5.    Copie el siguiente script de datos de usuario en el cuadro de diálogo Editar datos de usuario y, a continuación, seleccione Guardar.

Content-Type: multipart/mixed; boundary="//"
MIME-Version: 1.0

--//
Content-Type: text/cloud-config; charset="us-ascii"
MIME-Version: 1.0
Content-Transfer-Encoding: 7bit
Content-Disposition: attachment; filename="cloud-config.txt"

#cloud-config
cloud_final_modules:
- [scripts-user, always]

--//
Content-Type:
    text/x-shellscript; charset="us-ascii"
MIME-Version: 1.0
Content-Transfer-Encoding: 7bit
Content-Disposition: attachment; filename="userdata.txt"

#!/bin/bash
OS_USER=@@@@@@
chown root:root /home
chmod 755 /home
chown $OS_USER:$OS_USER /home/$OS_USER -R
chmod 700 /home/$OS_USER
chmod 700 /home/$OS_USER/.ssh
chmod 600 /home/$OS_USER/.ssh/authorized_keys
--//

Nota: Sustituya el valor de OS_USER por el nombre de usuario asociado a la AMI desde la que lanzó la instancia. Para obtener más información, consulte Obtenga el nombre de usuario predeterminado para la AMI que utilizó para lanzar la instancia en Causas comunes de problemas de conexión.

6.    En su equipo local, verifique la clave pública SSH.

7.    Si la firma de la clave pública SSH no aparece en el resultado, añada la clave correcta al script de datos de usuario que creó en el paso 5. Si la firma coincide, puede saltarse este paso. Añada la clave pública SSH al script de datos de usuario como se muestra en el siguiente ejemplo. Sustituya la clave de ejemplo por su clave pública SSH.

Content-Type: multipart/mixed; boundary="//"
MIME-Version: 1.0

--//
Content-Type: text/cloud-config; charset="us-ascii"
MIME-Version: 1.0
Content-Transfer-Encoding: 7bit
Content-Disposition: attachment; filename="cloud-config.txt"

#cloud-config
cloud_final_modules:
- [scripts-user, always]

--//
Content-Type:
    text/x-shellscript; charset="us-ascii"
MIME-Version: 1.0
Content-Transfer-Encoding: 7bit
Content-Disposition: attachment; filename="userdata.txt"

#!/bin/bash
OS_USER=@@@@@@
chown root:root /home
chmod 755 /home
chmod 700 /home/$OS_USER
chmod 700 /home/$OS_USER/.ssh
chmod 600 /home/$OS_USER/.ssh/authorized_keys
echo 'ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABAQDVogCW5eZogRp+vF6Ut360b0bYyTmqgYaCXOyiW77I916AS5jFL3zsCtONbGn4hnG/UGGWXpLfUV85qpVJb38fskPZNuyZtjGjXM2W7qqbCZ1N9HBb6IPBaL97tmqBi+8rD7mSkoHc40sIV+KxkQSvD6AAFjQruCjxzfGIApnOvuj6IMsVEuFHBx4QhkbCzafxo02D9BZT4+dMy7tmyuC+UiNEQpgfFoszl+4VNFTIPlQQyn6CpUiV/rFXIadXsHqc+UOdVnfEXP+30YL75RHabze/1F5MY6t94AEcmcb05Dq4vwN9IjcxKmwgvxLOXzryytepvHQU+PobBEXAMPLE' >> /home/$OS_USER/.ssh/authorized_keys
chown $OS_USER:$OS_USER /home/$OS_USER -R
--//

Nota: Sustituya el valor de OS_USER por el nombre de usuario asociado a la AMI desde la que lanzó la instancia. Para obtener más información, consulte Obtenga el nombre de usuario predeterminado para la AMI que utilizó para lanzar la instancia en Causas comunes de problemas de conexión.

8.    Inicie su instancia.

Nota: El script de datos de usuario anterior está configurado para ejecutarse cada vez que se reinicie la instancia. Tras recuperar el acceso a la instancia, elimine el script de datos de usuario.

Para eliminar los datos de usuario:

  • Complete los pasos 1 a 4 de esta sección.
  • Elimine el script de datos de usuario en el cuadro de diálogo Editar datos de usuario.

Información relacionada

¿Cómo puedo solucionar los problemas de conexión a mi instancia Linux de Amazon EC2 mediante SSH?

Perdí mi clave privada. ¿Cómo puedo conectarme a mi instancia de Linux?

¿Cómo puedo conectarme a mi instancia de Amazon EC2 si he perdido mi par de claves SSH tras el lanzamiento inicial?

OFICIAL DE AWS
OFICIAL DE AWSActualizada hace un año