Terraform запрашивает парольную фразу для Docker Host на каждом этапе

На самом деле я изучаю Terraform и пытаюсь использовать его для создания док-контейнеров на удаленном сервере. Он работает, но проблема в том, что он продолжает запрашивать парольную фразу на каждом этапе . Я хочу ввести парольную фразу только один раз в начале, а затем развернуть все свои ресурсы. Вот мой код терраформирования.

      terraform {
  required_providers {
    docker = {
      source  = "kreuzwerker/docker"
      version = ">= 2.13.0"
    }
  }
}


provider "docker" {
  host = "ssh://username@myserverip:22"

  registry_auth {
    address     = "my.docker.repo"
    config_file = pathexpand("~/.docker/config.json")
  }

}

resource "docker_image" "nginx" {
  name         = "nginx:latest"
  keep_locally = false
}

resource "docker_container" "nginx" {
  image = docker_image.nginx.latest
  name  = "tutorial"
  ports {
    internal = 80
    external = 8000
  }
}

Вот интерактивный вывод развертывания, вы можете видеть, что с каждой командой SSH я продолжаю вводить парольную фразу.

      PS C:\Users\lenovo\learn-terraform-docker-container> terraform apply
username@server's password:
docker_image.nginx: Refreshing state... [id=sha256:d1a364dc548d5357f0da3268c888e1971bbdb957ee3f028fe7194f1d61c6fdeenginx:latest]
username@server's password:
docker_container.nginx: Refreshing state... [id=fab834920f1b0d1382be1e54a112124042e889b26fa86cbc82bb86cb9962a0f1]
username@server's password:

Unless you have made equivalent changes to your configuration, or ignored the relevant       
attributes using ignore_changes, the following plan may include actions to undo or respond   
to these changes.

──────────────────────────────────────────────────────────────────────────────────────────── 

Terraform used the selected providers to generate the following execution plan. Resource     
actions are indicated with the following symbols:
  + create

Terraform will perform the following actions:

  # docker_container.nginx will be created

Plan: 1 to add, 0 to change, 0 to destroy.

Do you want to perform these actions?
  Terraform will perform the actions described above.
  Only 'yes' will be accepted to approve.

  Enter a value: yes

username@server's password
docker_container.nginx: Creating...
username@server's password: 
docker_container.nginx: Still creating... [10s elapsed]
docker_container.nginx: Creation complete after 11s 

Apply complete! Resources: 1 added, 0 changed, 0 destroyed.   

Я сгенерировал ключ SSH с помощью команды ssh-keygen и скопировал ключ в файл конфигурации SSH на своем локальном компьютере:

          Répertoire : C:\Users\lenovo\.ssh


Mode                 LastWriteTime         Length Name
----                 -------------         ------ ----
-a----        29/10/2021     15:33            316 config
-a----        29/10/2021     15:10           1766 id_rsa
-a----        29/10/2021     15:11            415 id_rsa.pub
-a----        29/10/2021     14:01           5569 known_hosts

Вот файл конфигурации SSH

      Host server_ip
  HostName server_ip
  IdentityFile "C:\Users\lenovo\.ssh\id_rsa"
  User username

Как я могу выполнить этот код, предоставив парольную фразу SSH только один раз?

1 ответ

вам нужно запустить ssh-агент и добавить свою личность, прикрепленную к вашему закрытому ключу, к агенту. не знаю, как это работает с окнами. с linux он должен работать с вызовом каждой строки отдельно следующего кода в оболочке:

export DISPLAY=1 export SSH_ASKPASS=/path_to_the/script_that_echos_your_passphrase.sh eval $(ssh-agent -s) ssh-add "$HOME/.ssh/id_your_private_key" < $SSH_ASKPASS

обратите внимание, вы также должны успеть принять отпечаток ssh-сервера при первом подключении. с линуксом будет примерно так:

ssh-keyscan -H ip_of_your_ssh_server > ~/.ssh/known_hosts

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