¿Cómo puedo resolver los errores «Permission denied (publickey)» o «Authentication failed, permission denied» cuando accedo a mi instancia de EC2?

7 minutos de lectura
0

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

Descripción corta

Los errores Permission denied (publickey) y Authentication failed, permission denied se producen por los siguientes motivos:

  • Usa un nombre de usuario incorrecto para su imagen de máquina de Amazon (AMI) al conectarse.
  • Tiene permisos de archivo incorrectos en el sistema operativo (SO) de la instancia.
  • El archivo authorized_keys tiene un archivo de clave pública SSH (.pub) incorrecto o ha iniciado la instancia sin una clave.
  • El archivo authorized_keys o la carpeta .ssh no tienen el nombre correcto.
  • Se ha eliminado el archivo authorized_keys o la carpeta .ssh.
  • (Solo en Ubuntu 20.x) Usa AuthorizedKeysCommand en su configuración de SSH.

Resolución

Comprobación de que tiene el nombre de usuario correcto para su AMI

Asegúrese de usar un nombre de usuario válido para su AMI.

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

Para verificar la configuración, utilice uno de los métodos siguientes.

Uso 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 se conecta a su instancia sin necesidad de tener una conexión de red. 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, concédale acceso en el nivel de cuenta de AWS. A continuación, cree políticas de AWS Identity and Access Management (IAM) que concedan acceso a la consola a sus usuarios de IAM. Cada instancia que utilice la consola serie debe incluir al menos un usuario con contraseña. 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.

Si no puede acceder a su instancia y no ha configurado el acceso a la consola serie, use otro método para verificar la configuración.

Nota: Si se muestran errores al poner en marcha comandos de AWS CLI, consulte Solución de errores de AWS CLI. Además, asegúrese de utilizar la versión más reciente de la AWS CLI.

Uso del administrador de sesiones de Systems Manager

Nota: Para usar este método, debe instalar SSM Agent. Para obtener una lista de los requisitos previos para usar Systems Manager, consulte el Paso 1: completar los requisitos previos del Administrador de sesiones.

Use el Administrador de sesiones de AWS Systems Manager para iniciar sesión en la instancia y realizar correcciones. Siga estos pasos:

  1. Abra la consola de Systems Manager.

  2. Inicie una sesión.

  3. Para comprobar si los permisos de los archivos del directorio home son correctos, ejecute el comando ls -ld:

    ls -ld /home/ec2-user/

    Nota: Sustituya ec2-user por su nombre de usuario en función de la imagen de máquina de Amazon (AMI) de su instancia.
    Se mostrará un resultado parecido al siguiente ejemplo:

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

    El siguiente ejemplo muestra una lista de los permisos necesarios correctos:
    Para el directorio principal de Linux /home, utilice (0755/drwxr-xr-x).
    Para el directorio principal del usuario /home/ec2-user/, utilice (0700/drwx------).
    Para obtener el permiso del directorio /home/ec2-user/.ssh de .ssh, utilice (0700/drwx------).
    Para obtener el permiso del archivo /home/ec2-user/.ssh/authorized_keys authorized_keys, utilice (0600/-rw-------).

  4. En su equipo local, compruebe que utiliza una 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. Ejecute el siguiente comando:

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

    Nota: Sustituya la clave de ejemplo por su clave pública SSH.

  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. Use SSH para conectarse a la instancia.

Ejecución del runbook de automatización AWSSupport-TroubleshootSSH

Utilice AWSSupport-TroubleshootSSH para comprobar y corregir los problemas que provocan errores de conexión remota a una máquina Linux a través de SSH. Para obtener más información, consulte Cuando intento conectarme a mi instancia de EC2 mediante SSH, se muestran mensajes de error. ¿Cómo puedo utilizar el flujo de trabajo de automatización AWSSupport-TroubleshootSSH para solucionar problemas de conexión de SSH?

Uso de un script de datos de usuario para reparar los permisos de SSH y añadir la clave pública SSH correcta al archivo authorized_keys

Importante: Para usar este método, debe detener la instancia. Al detener la instancia, se producen los siguientes efectos:

Para reparar sus permisos de SSH, siga estos pasos:

  1. Abra la consola de Amazon EC2.

  2. Elija Instancias en el panel de navegación y, a continuación, seleccione la instancia que desea iniciar.

  3. Detenga la instancia.

  4. Seleccione Acciones y, a continuación, seleccione Configuración de la instancia.

  5. Seleccione Editar datos de usuario.

  6. En Editar datos de usuario, introduzca el siguiente script de datos de usuario:

    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=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 os-user por el nombre de usuario asociado a la AMI que utilizó para iniciar la instancia.

  7. Seleccione Guardar.

  8. En su equipo local, compruebe que utiliza una clave pública SSH.

  9. Si la firma de la clave pública SSH no aparece en la salida, añada la clave al script de datos de usuario. Si la firma coincide, continúe con el siguiente paso.

    Ejemplo de script de datos de usuario con una 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=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
    --//
  10. Inicie la 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.

(Solo en Ubuntu 20.x) Comprobación del comando AuthorizedKeysCommand para ver la configuración de SSH

En Ubuntu 20.x, EC2 Instance Connect se instala de forma predeterminada. Al configurar los parámetros AuthorizedKeysCommand y AuthorizedKeysCommandUser para la autenticación SSH, la instalación de EC2 Instance Connect no actualiza estos ajustes. Como resultado, no puede usar EC2 Instance Connect. Para resolver este problema, elimine AuthorizedKeysCommand y AuthorizedKeysCommandUser de la configuración de SSH.

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?

¿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 4 meses