Сегодня я боролся с проблемами подключения Terraform Provisioner с ssh. Пока я пробовал то, что я мысль ранее работал с этим:
provisioner "remote-exec" {
inline = [
"echo ${google_compute_instance.testing-elastic-1.network_interface.0.access_config.0.assigned_nat_ip}"]
connection {
type = "ssh"
user = "root"
private_key = "${file("~/.ssh/google_compute_engine")}"
timeout = "45s"
}
}
Но я продолжаю получать следующую ошибку.
Error applying plan:
1 error(s) occurred:
* ssh: handshake failed: ssh: unable to authenticate, attempted methods [none publickey], no supported methods remain
Я также попытался войти в систему непосредственно на IP с помощью самого ssh на терминале.
ssh -i ~/.ssh/google_compute_engine.pub 122.122.122.122
Это сработало нормально. Так что я также попробовал это в конфигурации, или то, что, как я думал, имитирует это в конфигурации.
provisioner "remote-exec" {
inline = [
"echo ${google_compute_instance.testing-elastic-1.network_interface.0.access_config.0.assigned_nat_ip}"]
connection {
type = "ssh"
user = ""
private_key = "${file("~/.ssh/google_compute_engine")}"
timeout = "45s"
}
}
Получил очередную ошибку.
Не удалось применить план:
Произошла 1 ошибка (и):
Итак, я попробовал это.
provisioner "remote-exec" {
inline = [
"echo ${google_compute_instance.testing-elastic-1.network_interface.0.access_config.0.assigned_nat_ip}"]
connection {
type = "ssh"
private_key = "${file("~/.ssh/google_compute_engine")}"
timeout = "45s"
}
}
В конце концов, казалось, ничего не изменилось. Я вернулся с этим сообщением об ошибке.
Error applying plan:
1 error(s) occurred:
* ssh: handshake failed: ssh: unable to authenticate, attempted methods [none publickey], no supported methods remain
Я не совсем уверен, что еще мне нужно или нужно для работы аутентификации ssh.
Скорее всего, вы ошиблись sshKey
установить в вашем проекте. Предполагая, что у вас есть что-то вроде следующего, прикрепленного к вашему provisioner
или resource
:
resource "google_compute_instance" "my-host" {
// ...
connection {
type = "ssh"
agent = false
user = "${var.gce_ssh_user}"
port = "${var.gce_ssh_port}"
timeout = "5m"
private_key = "${file("${var.gce_ssh_private_key_file}")}"
}
// ...
}
У вас должна быть возможность проверить проект sshKey
:
$ gcloud compute project-info describe
Я предполагаю, что sshKey
В соответствии с GCE, часть проекта, устанавливающая значения, не сформирована должным образом. Если вы выполните что-то вроде следующего, вы можете найти ошибку конфигурации, которая вызывает эту проблему:
$ gcloud compute project-info describe > project.yaml
$ cat project.yaml| egrep 'ssh-' | awk '{print $1 " " $2 " " $3}' > existing_project_keys.pub
$ awk -v USER="$USER" '{print USER ":" $1 " " $2 " " USER}' .ssh_id_rsa.pub > new_keys.pub
$ cat existing_project_keys.pub >> new_keys.pub
$ gcloud compute project-info add-metadata --metadata-from-file sshKeys=new_keys.pub
(или это может быть что-то простое, например, у вас слишком много ключей, загруженных в ваш агент, поэтому я отключил агент в connection
выше)