Назад | Перейти на главную страницу

Ошибка Terraform ssh в экземпляре Google Cloud?

Сегодня я боролся с проблемами подключения 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 выше)