Share via


Solución de problemas de conexión SSH en la máquina virtual Linux de Azure debido a problemas de permisos y propiedad

Nota:

CentOS al que se hace referencia en este artículo es una distribución de Linux y llegará al final de la vida útil (EOL). Considere su uso y planifique en consecuencia. Para obtener más información, consulte Guía de fin de vida de CentOS.

En este artículo se proporcionan soluciones a un problema en el que se produce un error al conectarse a una máquina virtual Linux a través de Secure Shell (SSH) porque el directorio /var/empty/sshd de 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 es grabable por grupos o escritura global.

Síntomas

Al conectarse a una máquina virtual (VM) Linux mediante 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 producirse si el directorio afectado no es propiedad del usuario raíz, o si se puede escribir en grupo o escribir en el mundo.

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 serie

  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 siguientes comandos 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
    

Uso de 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 Azure Portal, abra la ventana Propiedades 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 a la Azure Portal, busque la configuración de la máquina virtual y, a continuación, seleccione Ejecutar comando en Operaciones.

  2. Para ejecutar el siguiente script de shell, 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 "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 serie de la máquina virtual no está disponible y el waagent no está listo.
  • En Ubuntu, el directorio /var/run/sshd se ejecuta en memoria. El reinicio de la máquina virtual también 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:

Utilizar Azure Linux Auto Repair (ALAR)

Los scripts de reparación automática de Linux (ALAR) de Azure forman parte de la extensión de reparación de máquinas virtuales que se describe en Reparación de una máquina virtual Linux mediante los comandos de reparación de máquinas virtuales de Azure.

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

Nota:

En los pasos siguientes, reemplace $RGNAMElos valores , $VMNAME, $USERNAME, $PASSWORDy 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. Monte y chroot en el sistema de archivos de la copia adjunta del disco del sistema operativo. Siga las instrucciones detalladas de chroot.

  3. Ejecute los siguientes comandos 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
    

Uso del método manual

Si la consola serie y el enfoque ALAR no se aplican a usted o no se aplican, la reparación debe 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 hacer chroot a los sistemas de archivos del disco del SO conectado. A continuación, siga el paso 3 de la sección Uso de Azure Linux Auto Repair (ALAR) para resolver los problemas de permisos y propiedad.

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.