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