Solución de problemas de conexión SSH a una máquina virtual Linux de Azure que producen error o se rechazan

Se aplica a: ✔️ Máquinas virtuales Linux

Este artículo le ayudará a detectar y corregir los problemas que se producen como consecuencia de errores de Secure Shell (SSH), errores de conexión de SSH o que se rechace SSH al intentar conectarse a una máquina virtual Linux. Para solucionar problemas de conexión, puede usar Azure Portal, la CLI de Azure o la extensión de acceso de máquina virtual para Linux.

Nota:

¿Le resultó útil este artículo? Su opinión es importante para nosotros. Use el botón Comentarios de esta página para indicarnos lo bien que ha funcionado este artículo o cómo podemos mejorarlo.

Pasos rápidos para solucionar problemas

Después de cada paso de solución de problemas, intente volver a conectarse a la máquina virtual.

  1. Restablezca la configuración de SSH.
  2. Restablezca las credenciales del usuario.
  3. Compruebe que las reglas de grupo de seguridad de red permiten el tráfico SSH y la asignación de roles.
    • Asegúrese de que existe una regla de grupo de seguridad de red para permitir el tráfico SSH (de forma predeterminada, el puerto TCP 22).
    • No se puede usar el redireccionamiento o la asignación de puertos sin utilizar un equilibrador de carga de Azure.
    • Si usa Microsoft Entra ID para administrar los inicios de sesión SSH, el usuario debe tener asignado el rol Inicio de sesión de administrador de máquina virtual o Inicio de sesión de usuario de máquina virtual en el grupo de recursos que contiene la VM y sus recursos asociados. De lo contrario, se recibirá el error "Permiso denegado (publickey)". Para obtener más información, consulte Configuración de asignaciones de roles para la máquina virtual que usa el inicio de sesión de Microsoft Entra.
  4. Compruebe el estado de los recursos de la máquina virtual.
    • Asegúrese de que el estado de la máquina virtual se notifica como correcto.
    • Si tiene habilitado el diagnóstico de arranque, compruebe que la máquina virtual no notifica errores de arranque en los registros.
  5. Reinicie la máquina virtual.
  6. Vuelva a implementar la máquina virtual.

Siga leyendo para conocer pasos y soluciones más detallados de solución de problemas.

Métodos disponibles para la solución de problemas de conexiones de SSH

Puede restablecer las credenciales, la configuración de SSH o solucionar problemas del estado del servicio SSH mediante uno de los siguientes métodos:

  • Azure Portal: este método funciona muy bien si necesita restablecer rápidamente la configuración o la clave de SSH y no tiene instaladas las herramientas de Azure.
  • Consola serie de máquina virtual en Azure: la consola serie de máquina virtual funcionará independientemente de la configuración de SSH y proporcionará una consola interactiva a la máquina virtual. De hecho, la consola serie se ha diseñado para resolver específicamente las situaciones de tipo "no se puede SSH". Más detalles a continuación.
  • Utilizar Ejecutar comando mediante Azure Portal: puede ejecutar comandos básicos mediante la funcionalidad Ejecutar comando mediante Azure Portal. La salida se devolverá al portal.
  • CLI de Azure: si ya está en la línea de comandos, restablezca rápidamente la configuración o las credenciales de SSH.
  • Extensión Azure VMAccessForLinux: permite crear y reutilizar archivos de definición json para restablecer la configuración o las credenciales de usuario de SSH.

Después de cada paso de solución de problemas, intente conectarse de nuevo a la máquina virtual. Si sigue sin poder conectarse, pruebe el paso siguiente.

Uso de Azure Portal

Azure Portal proporciona una forma rápida de restablecer la configuración o las credenciales de usuario de SSH sin necesidad de instalar ninguna herramienta en el equipo local.

Para empezar, seleccione la máquina virtual en Azure Portal. Desplácese hacia abajo hasta la sección Ayuda y seleccione Restablecer la contraseña como en el siguiente ejemplo:

Captura de pantalla para restablecer la configuración o las credenciales de SSH en Azure Portal.

Restablecer la configuración de SSH

Para restablecer la configuración de SSH, seleccione Reset configuration only en la sección Modo como se muestra en la captura de pantalla anterior y, a continuación, seleccione Actualizar. Una vez completada esta acción, intente acceder de nuevo a la máquina virtual.

Restablecimiento de las credenciales de SSH de un usuario

Para restablecer las credenciales de un usuario existente, seleccione Reset SSH public key o Reset password en la sección Modo como en la captura de pantalla anterior. Especifique el nombre de usuario y una clave SSH o una nueva contraseña y, a continuación, seleccione Actualizar.

Desde este menú también puede crear un usuario con privilegios de sudo en la máquina virtual. Escriba un nuevo nombre de usuario y la contraseña o clave SSH asociada y, a continuación, seleccione Actualizar.

Comprobación de reglas de seguridad

Use la verificación del flujo IP para confirmar si una regla de un grupo de seguridad de red está bloqueando el tráfico hacia o desde una máquina virtual. También puede revisar cómo crear reglas de grupo de seguridad eficaces para garantizar que exista la regla NSG "Permitir" de entrada y tenga prioridad para el puerto SSH (valor predeterminado 22). Para más información, consulte Uso de las reglas de seguridad vigentes para solucionar problemas de flujo de tráfico de máquinas virtuales.

Comprobación del enrutamiento

Use la funcionalidad Próximo salto de Network Watcher para confirmar que una ruta no impide que el tráfico se enrute hacia una máquina virtual o desde esta. También puede revisar las rutas efectivas para ver todas las rutas efectivas de una interfaz de red. Para más información, consulte Uso de rutas eficaces para solucionar problemas de flujo de tráfico de máquinas virtuales.

Uso de la consola serie de máquina virtual en Azure

La consola serie de máquina virtual en Azure ofrece acceso a una consola basada en texto para máquinas virtuales de Linux. Puede usar la consola para solucionar problemas de la conexión SSH en un shell interactivo. Asegúrese de que se han cumplido los requisitos previos para usar la consola serie y pruebe los siguientes comandos para tratar de solucionar los problemas de conectividad SSH.

Comprobar que el servicio SSH se está ejecutando

Para comprobar el estado del servicio, utilice el siguiente comando, que está disponible en la mayoría de las distribuciones de Linux actuales:

sudo systemctl status sshd.service

Ver los ejemplos de salida siguientes. Comprobar el estado del servicio desde la línea Active en la salida. La salida también muestra el puerto y las direcciones IP que se escuchan.

user@hostname:~$ sudo systemctl status sshd.service
● ssh.service - OpenBSD Secure Shell server
     Loaded: loaded (/lib/systemd/system/ssh.service; enabled; vendor preset: enabled)
     Active: active (running) since Thu 2022-06-23 17:44:36 UTC; 1 day 3h ago
       Docs: man:sshd(8)
             man:sshd_config(5)
   Main PID: 829 (sshd)
      Tasks: 1 (limit: 9535)
     Memory: 5.1M
     CGroup: /system.slice/ssh.service
             └─829 sshd: /usr/sbin/sshd -D [listener] 0 of 10-100 startups

Jun 23 17:44:35 ubu2004 systemd[1]: Starting OpenBSD Secure Shell server...
Jun 23 17:44:36 ubu2004 sshd[829]: Server listening on 0.0.0.0 port 22.
Jun 23 17:44:36 ubu2004 sshd[829]: Server listening on :: port 22.
Jun 23 17:44:36 ubu2004 systemd[1]: Started OpenBSD Secure Shell server.

Si este comando no está disponible o devuelve resultados inesperados, use otros comandos disponibles. Puede usar el comando ss como raíz o a través del comando sudo para verificar si el servicio SSH se está ejecutando en su VM.

El siguiente ejemplo muestra cómo ejecutar el comando ss a través de sudo:

sudo ss --listen --tcp --process --numeric | grep sshd

Nota:

Recomendamos el comando ss porque el comando netstat está en desuso y no siempre está disponible en las distribuciones modernas.

Si hay algún resultado, SSH se está ejecutando. Vea los ejemplos de salida siguientes:

$ sudo ss -ltpn | grep sshd
LISTEN    0         128                0.0.0.0:22               0.0.0.0:*        users:(("sshd",pid=829,fd=3))
LISTEN    0         128                   [::]:22                  [::]:*        users:(("sshd",pid=829,fd=4))

-ltpn es la forma acortada de los argumentos --listen --tcp --process –numeric. La salida muestra que el proceso SSHD 829 está escuchando tanto direcciones IPv4 como IPv6.

Comprobación del puerto en el que se está ejecutando SSH

La salida de comando de arriba muestra que el proceso SSHD está escuchando al puerto 22. Cuando el proceso SSHD está configurado para ejecutarse en otro puerto, el puerto se mostrará en la salida. Para comprobar si el cambio se realizó en el archivo de configuración estándar, examine el archivo de configuración predeterminado, /etc/ssh/sshd_config utilizando uno de los siguientes comandos:

grep -i port /etc/ssh/sshd_config

o

grep -i listen /etc/ssh/sshd_config

El resultado tendrá un aspecto similar al siguiente:

Port 22

Cualquier línea que comience con # en la salida es un comentario y se puede ignorar de forma segura. Si no se devuelve nada, o las líneas son comentarios, se utiliza la configuración predeterminada. La configuración predeterminada es escuchar todas las direcciones IP en el sistema, en el puerto 22.

Usar Ejecutar comando a través del Azure Portal

Si no puede ejecutar comandos a través de la Consola serie, por ejemplo, cuando solo se usan claves SSH para la autenticación, la función Ejecutar comando se puede utilizar para ejecutar comandos y ver la salida. Todos los comandos que se han ejecutado anteriormente desde la Consola serie se pueden ejecutar de manera no interactiva en la sección Ejecutar comando del Azure Portal. La salida se devolverá al portal Azure. No hay necesidad de utilizar sudo para ejecutar comandos en el contexto de Ejecutar comando.

Uso de la CLI de Azure

Si todavía no la tiene, instale la CLI de Azure más reciente e inicie sesión en una cuenta de Azure con az login.

Si ha creado y cargado una imagen de disco Linux personalizada, asegúrese de que el agente Linux de Microsoft Azure versión 2.0.5 o posterior esté instalado. Para máquinas virtuales creadas mediante imágenes de la galería, esta extensión de acceso ya está instalada y configurada automáticamente.

Restablecer la configuración de SSH

Incialmente también puede tratar de restablecer la configuración de SSH a los valores predeterminados y reiniciar el servidor SSH en la máquina virtual. Esto no cambia el nombre de la cuenta de usuario, la contraseña ni las claves SSH. En el ejemplo siguiente se utiliza az vm user reset-ssh para restablecer la configuración de SSH en la máquina virtual denominada myVM en myResourceGroup. Use sus propios valores, como se indica a continuación:

az vm user reset-ssh --resource-group myResourceGroup --name myVM

Restablecimiento de las credenciales de SSH de un usuario

En el ejemplo siguiente se usa az vm user update para restablecer las credenciales de myUsername al valor especificado en myPassword, en la máquina virtual llamada myVM en myResourceGroup. Use sus propios valores, como se indica a continuación:

az vm user update --resource-group myResourceGroup --name myVM \
     --username myUsername --password myPassword

Si usa la autenticación de claves SSH, puede restablecer la clave SSH de un usuario determinado: En el ejemplo siguiente se usa az vm access set-linux-user para actualizar la clave SSH almacenada en ~/.ssh/id_rsa.pub para el usuario llamado myUsername, en la máquina virtual llamada myVM en myResourceGroup. Use sus propios valores, como se indica a continuación:

az vm user update --resource-group myResourceGroup --name myVM \
    --username myUsername --ssh-key-value ~/.ssh/id_rsa.pub

Uso de la extensión VMAccess

La extensión de acceso de la VM para Linux lee un archivo json que define las acciones a realizar. Estas acciones incluyen restablecer SSHD, restablecer una clave SSH o agregar un usuario. Seguirá usando la CLI de Azure para llamar a la extensión VMAccess, pero puede reutilizar los archivos json entre varias máquinas virtuales si así lo desea. Este enfoque permite crear un repositorio de archivos json que luego se pueden llamar en escenarios determinados.

Restablecer SSHD

Cree un archivo llamado settings.json con el siguiente contenido:

{
    "reset_ssh":True
}

Con la CLI de Azure, luego puede llamar a la extensión VMAccessForLinux para restablecer la conexión de SSHD mediante la especificación de archivo json. En el ejemplo siguiente se utiliza az vm extension set para restablecer SSHD en la máquina virtual denominada myVM en myResourceGroup. Use sus propios valores, como se indica a continuación:

az vm extension set --resource-group philmea --vm-name Ubuntu \
    --name VMAccessForLinux --publisher Microsoft.OSTCExtensions --version 1.2 --settings settings.json

Restablecimiento de las credenciales de SSH de un usuario

Si SSHD parece funcionar correctamente, puede restablecer las credenciales de un usuario dado. Para restablecer la contraseña de un usuario, cree un archivo llamado settings.json. En el ejemplo siguiente se restablecen las credenciales de myUsername en el valor especificado en myPassword. Escriba las líneas siguientes en el archivo settings.json, usando sus propios valores:

{
    "username":"myUsername", "password":"myPassword"
}

O bien, para restablecer la clave SSH de un usuario, primero cree un archivo llamado settings.json. En el ejemplo siguiente se restablecen las credenciales para myUsername al valor especificado en myPassword, en la máquina virtual llamada myVM en myResourceGroup. Escriba las líneas siguientes en el archivo settings.json, usando sus propios valores:

{
    "username":"myUsername", "ssh_key":"mySSHKey"
}

Después de crear el archivo json, use la CLI de Azure para llamar a la extensión VMAccessForLinux y restablecer las credenciales de usuario SSH mediante la especificación del archivo json. En el ejemplo siguiente se restablecen las credenciales en la máquina virtual llamada myVM en myResourceGroup. Use sus propios valores, como se indica a continuación:

az vm extension set --resource-group philmea --vm-name Ubuntu \
    --name VMAccessForLinux --publisher Microsoft.OSTCExtensions --version 1.2 --settings settings.json

Restablecer la configuración de SSH

La configuración de SSHD podría no ser correcta o que el servicio haya encontrado un error. Puede restablecer SSHD para asegurarse de que la configuración de SSH sea válida. El restablecimiento de SSHD debe ser el primer paso de solución de problemas que debe realizar.

En el ejemplo siguiente se restablece SSHD en una máquina virtual llamada myVM en el grupo de recursos llamado myResourceGroup. Use sus propios nombres de grupo de recursos y máquina virtual, como se indica a continuación:

azure vm reset-access --resource-group myResourceGroup --name myVM \
    --reset-ssh

Restablecimiento de las credenciales de SSH de un usuario

Si SSHD parece funcionar correctamente, puede restablecer la contraseña de un usuario dado. En el ejemplo siguiente se restablecen las credenciales para myUsername al valor especificado en myPassword, en la máquina virtual llamada myVM en myResourceGroup. Use sus propios valores, como se indica a continuación:

azure vm reset-access --resource-group myResourceGroup --name myVM \
     --user-name myUsername --password myPassword

Si usa la autenticación de claves SSH, puede restablecer la clave SSH de un usuario determinado: En el ejemplo siguiente se actualiza la clave SSH almacenada en ~/.ssh/id_rsa.pub para el usuario llamado myUsername, en la máquina virtual llamada myVM en myResourceGroup. Use sus propios valores, como se indica a continuación:

azure vm reset-access --resource-group myResourceGroup --name myVM \
    --user-name myUsername --ssh-key-file ~/.ssh/id_rsa.pub

Reinicio de una máquina virtual

Si ha restablecido la configuración y las credenciales de usuario de SSH, o ha encontrado un error al hacerlo, puede intentar reiniciar la máquina virtual para solucionar los problemas de procesos subyacentes.

Azure Portal

Para reiniciar una máquina virtual mediante Azure Portal, seleccione la máquina virtual y, después, seleccione Reiniciar, como en el ejemplo siguiente:

Captura de pantalla para reiniciar una máquina virtual en el portal de Azure.

CLI de Azure

En el ejemplo siguiente se usa az vm restart para reiniciar la máquina virtual llamada myVM en el grupo de recursos llamado myResourceGroup. Use sus propios valores, como se indica a continuación:

az vm restart --resource-group myResourceGroup --name myVM

Reimplementación de una máquina virtual

Puede volver a implementar una máquina virtual en otro nodo dentro de Azure, lo que podría corregir los problemas de red subyacentes. Para más información sobre cómo volver a implementar una máquina virtual, consulte Nueva implementación de la máquina virtual en un nuevo nodo de Azure.

Nota:

Cuando finalice esta operación, se pierden datos de disco efímeros y se actualizan las direcciones IP dinámicas que están asociadas a la máquina virtual.

Azure Portal

Para volver a implementar una VM mediante Azure Portal, seleccione su VM y desplácese hacia abajo hasta la sección Ayuda. Seleccione Volver a implementar, como en el ejemplo siguiente:

Captura de pantalla para reimplementar una máquina virtual en el portal de Azure.

CLI de Azure

En el ejemplo siguiente se usa az vm redeploy para volver a implementar la máquina virtual llamada myVM en el grupo de recursos llamado myResourceGroup. Use sus propios valores, como se indica a continuación:

az vm redeploy --resource-group myResourceGroup --name myVM

Recursos adicionales

Ponte en contacto con nosotros para obtener ayuda

Si tiene preguntas o necesita ayuda, cree una solicitud de soporte o busque consejo en la comunidad de Azure. También puede enviar comentarios sobre el producto con los comentarios de la comunidad de Azure.