Устранение неполадок с подключением по протоколу SSH на виртуальной машине Linux Azure из-за проблем с разрешениями и владением

Примечание.

CentOS, упоминаемая в этой статье, является дистрибутивом Linux и достигнет конца жизненного срока (EOL). Рассмотрите возможность использования и спланируйте соответствующие планы. Дополнительные сведения см. в руководстве по окончании жизненного циклов CentOS.

В этой статье описаны решения проблемы, из-за которой подключение к виртуальной машине Linux через Secure Shell (SSH) завершается сбоем, так как каталог /var/empty/sshd в RHEL, каталог /var/lib/empty в SUSE или каталог /var/run/sshd в Ubuntu не существует, или он не принадлежит корневому пользователю, или он может быть доступен для записи в группу или в мире.

Симптомы

При подключении к виртуальной машине Linux по протоколу SSH подключение завершается сбоем. В зависимости от дистрибутива Linux может появилось следующее сообщение об ошибке о затронутом каталоге.

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

Причина

Эта проблема может возникнуть, если затронутый каталог не принадлежит корневому пользователю или если он доступен для записи в группу или в мире.

Чтобы устранить эту проблему, используйте одно из следующих решений:

Решение 1. Восстановление виртуальной машины в сети

Ниже приведены два метода восстановления виртуальной машины в автономном режиме:

Использование последовательной консоли

  1. Подключитесь к последовательной консоли виртуальной машины из портал Azure.

  2. Войдите в виртуальную машину, используя учетную запись локального администратора и соответствующие учетные данные или пароль.

  3. Выполните следующие команды, чтобы устранить проблему с разрешениями и владением:

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

Использование расширения "Выполнить команду"

Примечание.

Этот метод использует агент виртуальной машины Linux Azure (waagent). Поэтому убедитесь, что агент установлен на виртуальной машине и что ее служба запущена.

В портал Azure откройте окно Свойства виртуальной машины, чтобы проверка состояние агента. Если агент включен и имеет состояние Готово , выполните следующие действия, чтобы изменить разрешение:

  1. Перейдите к портал Azure, найдите параметры виртуальной машины и выберите Выполнить команду в разделе Операции.

  2. Выполните следующий скрипт оболочки, выбрав RunShellScript>Run (Выполнить) :

    #!/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. После завершения выполнения скрипта в окне консоли вывода отобразится сообщение "Включить успешно".

Если вы можете подключиться к виртуальной машине по протоколу SSH и хотите проанализировать сведения о выполнении скрипта run-command, изучите файл handler.log в каталоге /var/log/azure/run-command .

Решение 2. Восстановление виртуальной машины в автономном режиме

Примечание.

  • Используйте это разрешение, если доступ к последовательной консоли виртуальной машины недоступен и waagent не готов.
  • В Ubuntu каталог /var/run/sshd выполняется в памяти. Перезапуск виртуальной машины также исправит проблему. Поэтому устранение неполадок в автономном режиме на виртуальных машинах Ubuntu не требуется.

Ниже приведены два метода восстановления виртуальной машины в автономном режиме:

Использование автоматического восстановления Linux в Azure (ALAR)

Скрипты автоматического восстановления Azure Linux (ALAR) являются частью расширения восстановления виртуальной машины, описанного в разделе Восстановление виртуальной машины Linux с помощью команд восстановления виртуальной машины Azure.

Чтобы автоматизировать процесс в автономном режиме вручную, выполните следующие действия.

Примечание.

На следующих шагах замените $RGNAMEзначения , $VMNAME, $USERNAME, $PASSWORDи repairdiskcopy соответственно.

  1. Используйте команду az vm repair create , чтобы создать виртуальную машину восстановления. Виртуальная машина восстановления имеет копию диска ОС для подключенной проблемной виртуальной машины.

    az vm repair create --verbose -g $RGNAME -n $VMNAME --repair-username $USERNAME --repair-password $PASSWORD --copy-disk-name repairdiskcopy
    
  2. Войдите в виртуальную машину восстановления. Подключите и chroot к файловой системе подключенной копии диска ОС. Следуйте подробным инструкциям по chroot.

  3. Выполните следующие команды, чтобы устранить проблемы с разрешениями и владением:

    mkdir -p /var/empty/sshd
    chmod 755 /var/empty/sshd
    chown root:root /var/empty/sshd
    
  4. После применения изменений выполните следующую az vm repair restore команду, чтобы выполнить автоматическое переключение диска ОС с исходной виртуальной машиной.

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

Использование ручного метода

Если и последовательная консоль, и подход ALAR не применяются к вам или завершаются ошибкой, восстановление необходимо выполнить вручную. Выполните следующие действия, чтобы вручную подключить диск ОС к виртуальной машине восстановления и переключить диск ОС обратно на исходную виртуальную машину.

После успешного подключения диска ОС к виртуальной машине восстановления следуйте подробным инструкциям по подключению к файловой системе подключенного диска ОС. Затем выполните шаг 3 в разделе Использование автоматического восстановления Linux Azure (ALAR), чтобы устранить проблемы с разрешениями и владением.

Свяжитесь с нами для получения помощи

Если у вас есть вопросы или вам нужна помощь, создайте запрос в службу поддержки или обратитесь за поддержкой сообщества Azure. Вы также можете отправить отзыв о продукте в сообщество отзывов Azure.