Вопрос или проблема
Не имея возможности подключиться к моему экземпляру GCP VM, я понял, что это произошло из-за истекших ssh-ключей. Поэтому я создал новый публичный ключ и удалил истекшие ключи, отредактировав ВМ. После добавления нового ключа, я смог подключиться к ВМ после перезапуска. Однако, как только подключение выполнено, истекшие ssh-ключи снова добавляются к ВМ и мешают любым дальнейшим подключениям.
Я понимаю, что они должны быть где-то сохранены в метаданных, но я не могу найти, как их удалить и предотвратить их повторное появление. Буду благодарен за любую помощь.
Ответ или решение
Проблема, с которой вы столкнулись, действительно может быть довольно распространенной при работе с виртуальными машинами на Google Cloud Platform (GCP), особенно когда автоматически добавляемые SSH-ключи начинают создавать конфликт. Давайте подробно разберем, почему это происходит и как можно эффективно решить эту проблему.
Теория
На GCP SSH-ключи могут добавляться к ВМ (виртуальной машине) двумя основными способами:
-
Метаданные проекта и экземпляра: Когда вы добавляете SSH-ключи через метаданные проекта или метаданные конкретной ВМ, GCP автоматически включает эти ключи в файл
~/.ssh/authorized_keys
на виртуальной машине. Когда вы удаляете ключи напрямую из файлаauthorized_keys
, они могут появляться заново из-за синхронизации с метаданными. -
Google Cloud Console и OS Login: Если у вас включен OS Login, GCP управляет доступом через IAM и не использует метаданные. Однако для вашего случая это скорее всего не релевантно, так как проблема связана с повторным появлением ключей после их удаления вручную.
Пример
Предположим, что у вас есть ВМ с подключенными SSH-ключами через метаданные проекта. Вы подключаетесь, редактируя напрямую файл authorized_keys
для удаления устаревших ключей. После перезапуска ВМ ключи появляются снова, так как метаданные проекта, из которых они берутся, не были обновлены.
Применение
Для исправления этой проблемы вам необходимо провести комплексный подход к удалению и управлению SSH-ключами через GCP:
-
Проверка метаданных на уровне проекта и ВМ:
- Перейдите в Google Cloud Console и выберите ваш проект.
- Откройте раздел “Compute Engine”, затем "VM instances".
- Выберите вашу виртуальную машину и перейдите во вкладку "Метаданные".
- Здесь вы увидите ключи, которые были добавлены для этой конкретной ВМ и проекта.
-
Удаление SSH-ключей из метаданных:
- Перейдите во вкладку "Метаданные" на уровне проекта. Убедитесь, что никаких устаревших либо ненужных ключей в метаданных проекта и ВМ нет.
- Если вы видите ключи, которые нужно удалить, сделайте это тут в первую очередь. Это предотвратит их повторное появление после перезагрузки ВМ.
-
Проверка и изменении настроек OS Login:
- Убедитесь, что OS Login не активен, если вы не используете эту функцию для управления доступом. Это можно сделать в разделе IAM & Admin -> OS Login.
-
Инструменты и скрипты автоматизации:
- Используйте скрипты и инструменты автоматизации, такие как Terraform или gcloud CLI, для более эффективного и безопасного управления метаданными SSH. Таким образом, вы сможете систематизировать и иметь всегда актуальную информацию о вашем доступе.
-
Отслеживание изменений:
- Включите логирование для аудита изменений в настройках метаданных проекта и ВМ. Это позволит вам отслеживать, когда и какие изменения были сделаны с вашими SSH-ключами.
Таким образом, осознанно управляя SSH-ключами через соответствующие инструменты GCP и осознавая взаимосвязь между метаданными и файлом authorized_keys
, вы сможете избежать проблемы повторного появления устаревших ключей. В случае, если у вас включены какие-либо автоматические процессы на стороне клиента, которые могут восстанавливать метаданные или ключи, обязательно пересмотрите их логику с учетом рассмотренных аспектов.