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

Область применения: ✔️ виртуальные машины Linux

Сводка

В этой статье вы узнаете, как найти и исправить проблемы, возникающие из-за ошибок Secure Shell (SSH), сбоев SSH-соединения или отказа SSH при попытке подключения к виртуальной машине Linux. Вы можете использовать портал Azure, Azure CLI или расширение доступа к виртуальным машинам для Linux для устранения неполадок подключения и устранения проблем с подключением.

Примечание.

Статья была полезной? Ваши входные данные важны для нас. Нажмите кнопку "Отзывы" на этой странице, чтобы сообщить нам, насколько хорошо эта статья работала для вас или как мы можем улучшить ее.

Это важно

Новое! Попробуйте использовать инструмент VM Assist для решения наиболее часто встречающихся проблем. Мы рекомендуем запустить Помощник VM для Windows или Помощник VM для Linux. Эти средства диагностики на основе скриптов помогают выявить распространенные проблемы, влияющие на Azure гостевого агента виртуальной машины и общую работоспособность виртуальных машин.

Если у вас возникли проблемы с производительностью на виртуальных машинах, запустите эти средства перед обращением к служба поддержки Майкрософт.

Действия по устранению неполадок

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

  1. Выполните сброс конфигурации SSH.
  2. Сброс учетных данных для пользователя.
  3. Проверьте, что правила группы безопасности сети разрешают трафик SSH и назначение ролей.
    • Убедитесь, что правило для разрешения трафика SSH есть в группе безопасности сети (по умолчанию — TCP-порт 22).
    • Невозможно использовать перенаправление портов и сопоставление без использования подсистемы балансировки нагрузки Azure.
    • Если вы используете Microsoft Entra ID для управления входами SSH, пользователю необходимо назначить роль Virtual Machine Administrator Login или Virtual Machine User Login в группе ресурсов, которая содержит виртуальную машину и связанные с ней ресурсы. В противном случае будет получено сообщение об ошибке "Отказано в разрешении (publickey)". Дополнительные сведения смотрите в разделе Настройка назначений ролей виртуальной машины, использующей вход Microsoft Entra.
  4. Проверьте работоспособность ресурсов виртуальной машины.
    • Убедитесь, что виртуальная машина сообщает о своем исправном состоянии.
    • Если включена диагностика загрузки, убедитесь, что виртуальная машина не сообщала об ошибках загрузки в журналах.
  5. Перезапустите виртуальную машину.
  6. Заново разверните виртуальную машину.

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

Доступные методы устранения неполадок подключения SSH

Вы можете сбросить учетные данные, конфигурацию SSH или устранить неполадки с состоянием службы SSH с помощью одного из следующих методов:

  • портал Azure — отлично, если необходимо быстро сбросить конфигурацию SSH или ключ SSH, и у вас нет инструментов Azure.
  • Сериальная консоль Azure виртуальной машины — сериальная консоль будет работать независимо от конфигурации SSH и предоставит вам интерактивную консоль к вашей виртуальной машине. Действительно, ситуации, когда не удается установить SSH-соединение, как раз то, для чего была разработана последовательная консоль. Дополнительные сведения приведены ниже.
  • Использовать команду запуска с помощью портала Azure. Вы можете выполнять основные команды с помощью функции запуска команды с помощью портала Azure. Выходные данные будут возвращены на портал.
  • Azure CLI — если вы уже находитесь в командной строке, быстро сбросьте конфигурацию или учетные данные SSH.
  • Расширение Azure VMAccessForLinux — создание и повторное использование JSON-файлов для сброса настроек SSH или пользовательских данных.

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

Использование портала Azure

Портал Azure предоставляет быстрый способ сброса конфигурации SSH или учетных данных пользователя без установки средств на локальном компьютере.

Чтобы начать, выберите виртуальную машину на портале Azure. Прокрутите вниз до раздела справки и выберите "Сбросить пароль", как показано в следующем примере:

Скриншот для сброса конфигурации или учетных данных SSH в портале Azure.

Сброс конфигурации SSH

Чтобы сбросить конфигурацию SSH, выберите Reset configuration only в разделе Режим, как показано на предыдущем снимке экрана, а затем — Обновление. Сделав это, попытайтесь снова войти в виртуальною машину.

Сброс учетных данных SSH пользователя

Чтобы сбросить учетные данные существующего пользователя, выберите Reset SSH public key или Reset password в разделе Режим, как показано на скриншоте выше. Укажите имя пользователя и ключ SSH или новый пароль, а затем щелкните Обновление.

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

Проверка правил безопасности

Используйте IP flow verify, чтобы определить, блокирует ли правило в группе безопасности сети трафик, направленный к виртуальной машине или от нее. Кроме того, вы можете просмотреть действующие правила группы безопасности и убедиться, что для порта SSH (22 по умолчанию) существует и является приоритетным правило NSG, разрешающее входящий трафик. Дополнительные сведения см. в разделе Использование действующих правил безопасности для устранения проблем с потоком трафика в виртуальной машине.

Проверка маршрутизации

Используйте возможность Наблюдатель за сетями Next hop, чтобы убедиться, что маршрут не препятствует маршрутизации трафика в виртуальную машину или из нее. Кроме того, вы можете просмотреть эффективные маршруты для сетевого интерфейса. Дополнительные сведения см. в статье об использовании фактических маршрутов для устранения проблем с потоком трафика на виртуальной машине.

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

Последовательная консоль виртуальной машины Azure предоставляет доступ к текстовой консоли для виртуальных машин Linux. Консоль можно использовать для устранения неполадок подключения SSH в интерактивной оболочке. Убедитесь, что выполнены предварительные требования для использования последовательной консоли и выполните приведенные ниже команды, чтобы устранить неполадки с подключением SSH.

Убедитесь, что служба SSH запущена

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

sudo systemctl status sshd.service

См. следующий пример выходных данных. Проверьте состояние службы из Active строки в выходных данных. Выходные данные также отображают порт и IP-адреса, прослушиваемые.

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.

Если эта команда недоступна или возвращает непредвиденные результаты, используйте другие доступные команды. Чтобы проверить, запущена ли служба SSH на виртуальной машине, можно либо использовать команду ss от имени пользователя root, либо воспользоваться командой sudo.

В следующем примере показано, как выполнить команду через ss с помощью sudo:

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

Примечание.

Мы рекомендуем ss команду, так как netstat команда устарела и не всегда доступна в современных дистрибутивах.

Если есть какие-либо выходные данные, SSH запущен и работает. См. следующий пример выходных данных:

$ 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 — сокращенная форма --listen --tcp --process –numeric аргументов. В выходных данных показано, что процесс SSHD 829 прослушивает как IPv4, так и IPv6-адреса.

Проверьте, на каком порту выполняется SSH

Выходные данные команды выше показывают, что процесс SSHD прослушивает на порту 22. Когда процесс SSHD настроен для запуска на другом порту, порт будет отображаться в выходных данных. Чтобы проверить, было ли изменено в стандартном файле конфигурации, изучите файл конфигурации по умолчанию , etc/ssh/sshd_config с помощью одной из следующих команд:

grep -i port /etc/ssh/sshd_config

или

grep -i listen /etc/ssh/sshd_config

Выходные данные будут выглядеть следующим образом:

Port 22

Любая строка, начинающаяся с # выходных данных, является комментарием и может быть безопасно проигнорирована. Если ничего не возвращается, или строки являются комментариями, используется конфигурация по умолчанию. Конфигурация по умолчанию — прослушивать все IP-адреса в системе через порт 22.

Использовать команду запуска с помощью портала Azure

Если вы не можете выполнять команды через последовательную консоль, например если для проверки подлинности используются только ключи SSH, функция run Command может использоваться для выдачи команд и просмотра выходных данных. Все команды, которые ранее выполнялись из последовательной консоли, можно выполнять неинтерактивно в разделе "Выполнить команду" на портале Azure. Выходные данные будут возвращены на портал Azure. Нет необходимости использовать sudo для выполнения команд в контексте выполнения команды.

Использование Azure CLI

Если вы еще не сделали этого, установите последнюю версию Azure CLI и войдите в учетную запись Azure с помощью имени входа az login.

При создании и отправке пользовательского образа диска Linux убедитесь, что установлен агент Linux Microsoft Azure агент Linux версии 2.0.5 или более поздней. В виртуальных машинах, созданных с помощью образов из галереи, это расширение для доступа уже установлено и настроено.

Сбросьте конфигурацию SSH.

Вы можете сначала попробовать сбросить конфигурацию SSH к значениям по умолчанию и перезагрузить сервер SSH на виртуальной машине. При выполнении этого шага не изменяется имя учетной записи пользователя, пароль или ключи SSH. В следующем примере используется команда az vm user reset-ssh для сброса конфигурации SSH на виртуальной машине с именем myVM в myResourceGroup. Используйте свои значения следующим образом:

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

Сброс учетных данных SSH пользователя

В следующем примере используется az vm user update, чтобы сбросить учетные данные для myUsername к значению, указанному в myPassword, на виртуальной машине под названием myVM в myResourceGroup. Используйте свои значения следующим образом:

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

При использовании аутентификации с помощью ключа SSH можно сбросить ключ SSH для отдельного пользователя. В следующем примере используется az vm user update для обновления ключа SSH, хранящегося в ~/.ssh/id_rsa.pub, для пользователя с именем myUsername, на виртуальной машине с именем myVM в myResourceGroup. Используйте свои значения следующим образом:

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

Использование расширения VMAccess

Расширение доступа к виртуальной машине для Linux читает из json-файла, который определяет действия, которые необходимо выполнить. К этим действиям относятся перезапуск SSHD, сброс ключа SSH или добавление пользователя. Вы по-прежнему используете Azure CLI для вызова расширения VMAccess, но при необходимости можно повторно использовать файлы JSON на нескольких виртуальных машинах. Такой подход позволяет создать репозиторий JSON-файлов, которые можно впоследствии вызывать для заданных сценариев.

Сброс SSHD

Создайте файл settings.json со следующим содержимым:

{
    "reset_ssh": true
}

Используя Azure CLI, вызовите расширение VMAccessForLinux для сброса подключения SSHD, указав свой json-файл. В следующем примере используется команда az vm extension set для сброса SSHD на виртуальной машине под именем myVM в myResourceGroup. Используйте свои значения следующим образом:

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

Сброс учетных данных SSH для пользователя.

Если кажется, что SSHD работает правильно, можно сбросить учетные данные для данного пользователя. Чтобы сбросить пароль для пользователя, создайте файл с именем settings.json. В следующем примере сбрасываются учетные данные для myUsername до значения, указанного в myPassword. Введите следующие строки в файл settings.json, используя свои значения:

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

Чтобы сбросить ключ SSH для пользователя, сначала создайте файл с именем settings.json. В следующем примере сбрасываются учетные данные для myUsername до значения, указанного в myPassword, на виртуальной машине myVM в myResourceGroup. Введите следующие строки в файл settings.json, используя свои значения:

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

После создания файла JSON используйте Azure CLI для вызова расширения VMAccessForLinux, чтобы сбросить учетные данные пользователя SSH, указав файл JSON. В следующем примере сбрасываются учетные данные на виртуальной машине с именем myVM в myResourceGroup. Используйте свои значения следующим образом:

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

Перезапуск виртуальной машины

Если вы сбросили конфигурацию SSH и учетные данные пользователя или столкнулись с ошибкой при этом, попробуйте перезапустить виртуальную машину, чтобы устранить проблемы с основными вычислительными мощностями.

портал Azure

Чтобы перезапустить виртуальную машину с помощью портала Azure, выберите виртуальную машину и выберите Restart как показано в следующем примере:

Скриншот перезапуска виртуальной машины в портале Azure.

Azure CLI

В следующем примере используется команда az vm restart, чтобы перезапустить виртуальную машину myVM в группе ресурсов myResourceGroup. Используйте свои значения следующим образом:

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

Повторное развертывание виртуальной машины

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

Примечание.

Обратите внимание, что после этой операции будут потеряны данные на временном диске, а также изменятся динамические IP-адреса, связанные с виртуальной машиной.

портал Azure

Чтобы повторно развернуть виртуальную машину с помощью портала Azure, выберите виртуальную машину и прокрутите вниз до раздела Help. Щелкните Повторно развернуть, как показано в следующем примере.

Снимок экрана для повторного развертывания виртуальной машины на портале Azure.

Azure CLI

В следующем примере используется команда az vm restart, чтобы повторно развернуть виртуальную машину myVM в группе ресурсов myResourceGroup. Используйте свои значения следующим образом:

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

Дополнительные ресурсы