Невозможно подключиться по SSH к виртуальной машине GCP после перезагрузки

Раньше я занимался удаленной разработкой через код VS. Я создал ключ SSH в своей локальной Windows 10 и добавил открытый ключ в экземпляр виртуальной машины. Все было хорошо неделю. Но мой VS Code внезапно показал, что сегодня отказано в разрешении. Поэтому я пытаюсь выяснить, почему в консоли GCP. Вот что я нашел, но понятия не имею, в чем причина и как ее исправить.

  • правила брандмауэра верны и неизменны.
  • невозможно подключиться к виртуальной машине в консоли GCP, щелкнув список экземпляров виртуальной машины > Подключиться > SSH. Выдает сообщение «Ошибка подключения». При нажатии кнопки «Устранение неполадок» отобразится состояние виртуальной машины «ОК» и состояние сети «ОК», но загрузка зависла при проверке разрешений пользователя.

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

  • Затем я создал новые пары ключей SSH в своей локальной Windows 10.
  • Новый ключ затем добавляется в виртуальную машину. Срок действия не установлен, просто «{KEY} {USER}». Однако я все еще не могу подключить SSH через VScode.
  • Подключиться к виртуальной машине в GCP по-прежнему не удается
  • Я попытался создать новую виртуальную машину и протестировать ее с помощью пар ключей SSH. Ключ работает. Я могу подключиться с помощью кода VS.

Затем я пытаюсь «Просмотреть журнал». И обнаружил, что каждый раз при регистрации обновления ключей для пользователя g3dayseo возникает множество ошибок. Вот некоторые примеры.

Заголовок

      Updating keys for user g3dayseo.
      {
insertId: "27ysnuf4tckja"
jsonPayload: {
localTimestamp: "2023-06-30T00:09:42.8300Z"
message: "Updating keys for user g3dayseo."
}
logName: "projects/beautylnfcom/logs/GCEGuestAgent"
receiveTimestamp: "2023-06-30T00:09:43.842531278Z"
resource: {2}
severity: "INFO"
sourceLocation: {3}
timestamp: "2023-06-30T00:09:42.830084525Z"
}

Заголовок

      Invalid ssh key entry - expired key: g3dayseo:ecdsa-sha2-nistp256 AAAAE2VjZHNhLXNoYTItbmlzdHAyNTYAAAAIbmlzdHAyNTYAAABBBFKv3f/jQZRbGdQnvL5Swy6f/E4Z84nnwHfgyiorYPu5VS5GF9yOOTe3wFFtGLFQns0qHtzIn2MgsEfQQIml8Vk= google-ssh {"userName":"3dayseo@gmail.com","expireOn":"2023-06-30T00:12:27+0000"}

Содержание

      {
insertId: "1js4l5ne4dso2"
jsonPayload: {
localTimestamp: "2023-06-30T00:12:42.9094Z"
message: "Invalid ssh key entry - expired key: g3dayseo:ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABAQCWSRpEt0TN03Jehtu0HEM2pXoJK7+wqZfss/TSbCGqPaZ4y36nZ8d/zyc9Q3cLkTFN9nYlDEwwUnG1UASpKBYox0Q7o/KTBOP0YGzksTPTvBjWaiUlCmZ/jAdj3ATaH5xyyjX89V5BXWAJRG2HxbW/U1r48Uk5Z+OZ8Q82MzYST6FkJbONp2jG9NEIiyg/oEj8iCpAMlh6xcioAlYZSyvAcKR6auCDkOcUTOkTG09/UG/3ZHdY+ZnMiMyGI1rc9fTN36yA7oSMvpKWxvk+caWpUTA4jlovxYIm5EeN9vk5BKK2YGt7cBNynZgA394M/mKAIk/n3rLaAVBitIexwntL google-ssh {"userName":"3dayseo@gmail.com","expireOn":"2023-06-30T00:12:41+0000"}"
}
logName: "projects/beautylnfcom/logs/GCEGuestAgent"
receiveTimestamp: "2023-06-30T00:12:43.919710439Z"
resource: {
labels: {3}
type: "gce_instance"
}
severity: "ERROR"
sourceLocation: {
file: "non_windows_accounts.go"
function: "main.getUserKeys"
line: "199"
}
timestamp: "2023-06-30T00:12:42.909503214Z"
}

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

      gcloud compute ssh --zone "asia-east1-b" "newpostai" --project "beautylnfcom"

Потом просит пароль. Но насколько я помню, пароль я раньше не ставил.

Пожалуйста помоги. Я очень расстроен. Хотя у меня есть резервная копия и я могу загрузить ее на новый экземпляр, мне очень хочется разобраться, как это происходит после перезагрузки, как это исправить и как предотвратить.

Заранее спасибо, что прочитали это.

1 ответ

Ошибка " Permission denied (publickey)" может произойти по нескольким причинам. Ниже приведены два обходных пути, которые могут помочь решить вашу проблему:

Невозможно получить действительный пароль от виртуальной машины Linux (он зашифрован), но если вы хотите получить или сбросить пароль для локального пользователя на виртуальной машине Linux, можно установить новый пароль.

Обходной путь 1. Сброс пароля с помощью сценария запуска:

Этот сценарий запуска можно использовать для установки временного пароля при загрузке экземпляра (замените [имя пользователя] и [пароль] фактическим именем пользователя и временным паролем по вашему выбору:

Метод-1:

      #! /bin/bash
echo [Username] : [Password] | chpasswd

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

  1. Перейдите на страницу экземпляров виртуальных машин в консоли GCP.

  2. Нажмите на экземпляр, для которого вы хотите добавить сценарий запуска.

  3. Нажмите кнопку «Изменить» вверху страницы.

  4. Нажмите на 'Enable connecting to serial ports'

  5. В разделе «Пользовательские метаданные» вы найдете «Automation' раздел.

  6. Установить ниже 'Value'в'Startup script' коробка:

Метод-1:

      #! /bin/bash
echo root:PASSWORD | chpasswd

Метод-2:

      #! /bin/bash
usermod -p $(echo "password" | openssl passwd -1 -stdin) root
  1. Нажмите «Сохранить», а затем нажмите «СБРОС» в верхней части страницы. Возможно, вам придется подождать некоторое время, пока экземпляр перезагрузится.

  2. Нажмите на 'Connect to serial port' на странице.

  3. В новом окне возможно придется немного подождать и нажать 'Enter' на клавиатуре один раз; затем вы должны увидеть приглашение для входа в систему.

  4. Войдите, используя предоставленный вами рут и ПАРОЛЬ.

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

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

  1. Если последовательная консоль может подключиться к экземпляру, проверьте разрешение для/etc/ssh/ssh_host_rsa_keyфайл с использованиемls -ltrhкомандование в/etc/sshкаталог.

  2. Разрешение для файла должно быть -rw-r---r--. Если не,chmod 644 ssh_host_rsa_keyКоманда может использоваться для установки разрешений.

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

  4. Создайте снимок загрузочного диска. См. Создание снимка

  5. Создайте резервный экземпляр и подключите дополнительный диск моментального снимка.

  6. Бегатьlsblk -fдля идентификации добавленного вторичного диска.

  7. Смонтируйте диск с помощью команд

Команда для создания каталога:mkdir ~/recoveryКоманда для монтирования диска:mount -o nouuid <disk_path> ~/recovery

  1. Проверьте наличиеssh_host_rsa_keyиssh_host_rsa_key.pubфайлы в/etc/ssh/каталог и проверьте разрешение, обратившись к шагу 2.

  2. Если файлы отсутствуют, сгенерируйте ключ для экземпляра. Измените корневой каталог, выполнив команду:chroot ~/recovery/

Сгенерируйте ключи хоста, выполнив команду:

      $ sudo ssh-keygen -t rsa -f /etc/ssh/ssh_host_rsa_key
$ sudo ssh-keygen -t dsa -f /etc/ssh/ssh_host_dsa_key
$ sudo ssh-keygen -t ecdsa -f /etc/ssh/ssh_host_ecdsa_key
  1. Размонтируйте диск с помощьюumount ~/recoveryиз аварийной виртуальной машины и отсоедините диск от экземпляра

  2. Подключите диск обратно к затронутому экземпляру и перезапустите экземпляр.

Другие вопросы по тегам