使用Packer+Ansible在AWS构建AMI时遇SSH权限错误求助
解决Packer+Ansible构建AWS AMI时的SSH权限错误
问题原因
- Packer调用Ansible连接AWS EC2实例时,Ansible会默认读取本地运行用户的
~/.ssh/config文件,而SSH对该文件的权限有严格要求:- 文件所有者必须与当前运行用户完全匹配
- 文件权限只能设置为
600(仅所有者可读可写) - 父目录
~/.ssh的权限必须是700(仅所有者拥有全部权限)
- 一旦权限或所有者不满足要求,SSH会直接拒绝使用该配置文件,触发连接错误。
解决步骤
1. 修复本地.ssh目录及文件权限
执行以下命令修正权限(替换myuser为你的实际用户名):
chown myuser:myuser /home/myuser/.ssh/config chmod 600 /home/myuser/.ssh/config chmod 700 /home/myuser/.ssh
2. 让Packer绕过本地SSH配置(可选)
如果不想依赖本地ssh/config,可以在Packer的HCL配置中添加参数,强制跳过本地配置文件:
source "amazon-ebs" "ami-build" { # 你的AWS镜像、区域等基础配置... ssh_username = "ec2-user" # 根据镜像类型调整,比如Ubuntu用ubuntu ssh_pty = true ssh_timeout = "10m" # 禁用读取本地SSH配置 ssh_extra_args = ["-F", "/dev/null"] }
3. 检查Ansible配置是否强制加载本地SSH config
查看项目或全局的ansible.cfg文件,确保ssh_connection段没有强制指定有问题的配置文件:
[ssh_connection] ssh_args = -C -o ControlMaster=auto -o ControlPersist=60s # 避免添加-F参数指向权限错误的config文件
验证方式
修复权限后,先手动测试SSH连接到EC2实例(使用Packer配置中相同的密钥),确认无权限警告:
ssh -i /path/to/your/key.pem ec2-user@<实例公网IP>
如果连接正常,再重新运行Packer构建命令。
内容的提问来源于stack exchange,提问作者spitfiredd
相关产品推荐
相关产品推荐

