Terraform操作远程Docker主机每步需输入SSH密码如何解决?
解决Terraform部署Docker重复要求输入SSH密码的方案
操作步骤
1. 修正Terraform Docker Provider配置
你当前的Provider配置未匹配本地SSH配置的别名规则,将host字段修改为SSH config中定义的Host值即可自动加载对应SSH配置,修改后配置如下:
terraform { required_providers { docker = { source = "kreuzwerker/docker" version = ">= 2.13.0" } } } provider "docker" { host = "ssh://server_ip" # 直接使用SSH config里定义的Host名称,自动读取用户名、端口、私钥路径配置 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 } }
注意:必须提前将本地生成的id_rsa.pub公钥内容追加到远程服务器对应用户目录下的~/.ssh/authorized_keys文件中,且确保服务器端.ssh目录权限为700、authorized_keys文件权限为600,否则SSH密钥认证会不生效。
2. 配置本地SSH Agent缓存私钥密码
由于你的私钥设置了密码,通过SSH Agent可以缓存密码,实现一次输入全会话生效,Windows下操作如下:
- 按下
Win+R输入services.msc打开服务管理器,找到OpenSSH Authentication Agent服务,将启动类型修改为「自动」,然后启动该服务 - 打开PowerShell执行命令添加私钥到Agent:
ssh-add C:\Users\lenovo\.ssh\id_rsa
执行时输入一次你的私钥密码即可,后续当前Windows登录会话内所有SSH连接都不需要重复输入密码。
可选:移除私钥密码实现免密操作
如果不需要私钥密码保护,可执行以下命令移除密码:
ssh-keygen -p -f C:\Users\lenovo\.ssh\id_rsa
执行时输入原密码,新密码直接留空回车确认即可,之后所有SSH连接都不需要输入任何密码。
内容的提问来源于stack exchange,提问作者joe1531
相关产品推荐
相关产品推荐

