Resolución de problemas de conexión SSH en una máquina virtual Linux de Azure debido a problemas de permisos y propiedad.

Se aplica a: ✔️ Máquinas virtuales Linux

Resumen

En este artículo se proporcionan soluciones a un problema en el que se produce un error en la conexión a una máquina virtual Linux a través de Secure Shell (SSH) porque el directorio /var/empty/sshd en RHEL, el directorio /var/lib/empty en SUSE, o el directorio /var/run/sshd en Ubuntu, no existe, o no es propiedad del usuario raíz, o bien es grabable de grupo o de escritura mundial.

Importante

Nuevo Pruebe la asistencia de máquina virtual para resolver los principales problemas. Se recomienda ejecutar VM assist for Windows o VM assist for Linux. Estas herramientas de diagnóstico basadas en scripts le ayudan a identificar problemas comunes que afectan al agente invitado de máquina virtual Azure y el estado general de las máquinas virtuales.

Si experimenta problemas de rendimiento en las máquinas virtuales, ejecute estas herramientas primero antes de ponerse en contacto con Soporte técnico de Microsoft.

Síntomas

Cuando se conecta a una máquina virtual Linux a través de SSH, se produce un error en la conexión. Puede recibir el siguiente mensaje de error sobre el directorio afectado, en función de la distribución de Linux.

sudo tail /var/log/messages
sshd: /var/empty/sshd must be owned by root and not group or world-writable.  

Causa

Este problema puede ocurrir si el directorio afectado no es propiedad del usuario raíz o si es escribible por el grupo o accesible para todos.

Para resolver este problema, use una de las siguientes resoluciones:

Resolución 1: Reparación de la máquina virtual en línea

Estos son dos métodos para reparar la máquina virtual sin conexión:

Utilizar la consola serial

  1. Conéctese a la consola serie de la máquina virtual desde Azure portal.

  2. Inicie sesión en la máquina virtual mediante una cuenta administrativa local y su credencial o contraseña correspondientes.

  3. Ejecute los comandos siguientes para resolver el problema de permisos y propiedad:

    sudo mkdir -p /var/empty/sshd
    sudo chmod 755 /var/empty/sshd
    sudo chown root:root /var/empty/sshd
    

Usar la extensión "Ejecutar comando"

Nota:

Este método se basa en el agente de máquina virtual Linux (waagent) de Azure. Por lo tanto, asegúrese de que el agente está instalado en la máquina virtual y de que su servicio se está ejecutando.

En el portal de Azure, abra la ventana Properties de la máquina virtual para comprobar el estado del agente. Si el agente está habilitado y tiene el estado Listo , siga estos pasos para cambiar el permiso:

  1. Vaya al portal de Azure, busque la configuración de la máquina virtual y seleccione Run Command en Operations.

  2. Ejecute el siguiente script de shell; para ello, seleccione Ejecutar RunShellScript>:

    #!/bin/bash
    
    #Script to change permissions on a file
    mkdir -p /var/empty/sshd;chmod 755 /var/empty/sshd;chown root:root /var/empty/sshd
    

  1. Una vez finalizada la ejecución del script, la ventana de la consola de salida mostrará un mensaje "Enable succeeded" (Habilitar correctamente).

Si puede conectarse a la máquina virtual a través de SSH y desea analizar los detalles de la ejecución del script run-command, examine el archivo handler.log en el directorio /var/log/azure/run-command .

Resolución 2: Reparación de la máquina virtual sin conexión

Nota:

  • Use esta resolución si el acceso a la consola de serie de la máquina virtual no está disponible y waagent no está listo.
  • En Ubuntu, el directorio /var/run/sshd se ejecuta en memoria. Al reiniciar la máquina virtual también se corregirá el problema. Por lo tanto, no es necesario solucionar problemas sin conexión en máquinas virtuales Ubuntu.

Estos son dos métodos para reparar la máquina virtual sin conexión:

Uso de az vm repair

El az vm repair, parte de la extensión de reparación de máquina virtual para la CLI de Azure, se describe en Reparar una máquina virtual Linux mediante los comandos de reparación de máquina virtual de Azure.

Siga estos pasos para automatizar el proceso manual sin conexión:

Nota:

En los pasos siguientes, reemplace los valores $RGNAME, $VMNAME, $USERNAME, $PASSWORD y repairdiskcopy en consecuencia.

  1. Use el comando az vm repair create para crear una máquina virtual de reparación. La máquina virtual de reparación tiene una copia del disco del sistema operativo para la máquina virtual problemática conectada.

    az vm repair create --verbose -g $RGNAME -n $VMNAME --repair-username $USERNAME --repair-password $PASSWORD --copy-disk-name repairdiskcopy
    
  2. Inicie sesión en la máquina virtual de reparación. Montar y hacer chroot al sistema de archivos del disco adjunto del sistema operativo. Siga las instrucciones detalladas de chroot.

  3. Ejecute los comandos siguientes para resolver los problemas de permisos y propiedad:

    mkdir -p /var/empty/sshd
    chmod 755 /var/empty/sshd
    chown root:root /var/empty/sshd
    
  4. Una vez aplicados los cambios, ejecute el siguiente az vm repair restore comando para realizar un intercambio automático de disco del sistema operativo con la máquina virtual original.

    az vm repair restore --verbose -g $RGNAME -n $VMNAME
    

Usar el método manual

Si tanto la consola serial como el método az vm repair no se aplican a usted o fallan, la reparación deberá realizarse manualmente. Siga los pasos siguientes para conectar manualmente el disco del sistema operativo a una máquina virtual de recuperación y volver a intercambiar el disco del sistema operativo a la máquina virtual original:

Una vez que el disco del SO se haya conectado correctamente a la máquina virtual de recuperación, siga las instrucciones detalladas de chroot para montar y realizar chroot en los sistemas de archivos del disco del SO conectado. A continuación, siga el paso 3 de la sección sobre cómo utilizar az vm repair para resolver los problemas de permisos y propiedad.