Я добавляю ssh-ключи в свой экземпляр gce, используя это:
ssh-keys = "${var.ssh_user_name}:${var.ssh_pub_key}"
ssh_pub_key — это выходная переменная открытого ключа модуля tls_private_key, который динамически генерирует ssh-ключи.
В соответствии с форматом ssh-ключа GCP в конце открытого ключа должно быть добавлено имя пользователя, но при создании динамических ключей с использованием ресурса tls_private_key
имя пользователя не добавляется.
После добавления ssh-keys я могу войти в экземпляр gcp, используя закрытый ключ, но если я попытаюсь отредактировать в консоли gcp, я получу следующую ошибку:
"The SSH key is in the wrong format"
Это связано с тем, что имя пользователя не добавляется в конце
Моя проблема:
ssh-keys = "${var.ssh_user_name}:${var.ssh_pub_key}"
Разве это не должно заботиться об этом? Есть ли другой способ сделать это? Если ssh-ключ действительно неправильный, то ssh даже нельзя разрешать. Я искал все способы добавить ssh-ключ на уровне экземпляра в GCP через terraform, я не могу найти ничего другого.
ssh-keys = "${var.ssh_user_name}:${var.ssh_pub_key}"
В конце var.ssh_pub_key есть дополнительный символ строки \n
, и я не могу изменить это выходную переменную модуля генерации ключей.
Таким образом, имя пользователя требуется в открытом ключе, а не в частном. Так что насчет чего-то простого, например
"${var.ssh_user_name}:${var.ssh_pub_key} ${var.ssh_user_name}"
- теперь интерполяция terraform должна сделать ваш открытый ключ в правильном формате
Редактировать: Таким образом, решение для символа \n в конце в чистом терраформе:
locals {
ssh_pub_key_without_new_line = "${replace(var.ssh_pub_key, "\n", "")}"
}
А потом
"${var.ssh_user_name}:${local.ssh_pub_key_without_new_line} ${var.ssh_user_name}"
Я изменил ответ, чтобы решить и эту проблему. Буду признателен, если вы примете его, если он действительно решит вашу проблему :)
@JakubBujny привет, не могли бы вы рассказать мне, как я могу подключиться по ssh к моей машине gcp, используя terraform, чтобы запустить скрипт, с помощью которого я пытался сгенерировать ключ (как открытый, так и закрытый), и указать путь к ресурсу, но используя это, я не буду выполнять свой скрипт не могли бы вы сказать мне, как я могу бежать
Да, я пытался это сделать, но проблема в том, что вывод tls_private_key, public_key_openssh имеет дополнительный символ строки \n, поэтому имя пользователя добавляется в следующей строке.