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.
- Restablezca la configuración de SSH.
- Restablezca las credenciales del usuario.
- 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.
- 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.
- Reinicie la máquina virtual.
- 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:
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:
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:
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
- Si sigue sin poder establecer una conexión SSH a su máquina virtual después de seguir los pasos anteriores, puede examinar pasos más detallados de solución de problemas para ver pasos adicionales para resolver su problema.
- Para más información sobre cómo solucionar problemas de acceso a las aplicaciones, consulte Solución de problemas de acceso a una aplicación que se ejecuta en una máquina virtual de Azure.
- Para más información sobre cómo solucionar problemas de máquinas virtuales que se crearon mediante el modelo de implementación clásica, consulte Restablecimiento de una contraseña o clave SSH para máquinas virtuales Linux.
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.