如何解决Packer复用SSH密钥对构建EC2镜像时的SSH认证错误
问题排查与解决方案
核心原因1:Packer SSH认证配置冲突
你当前配置同时开启了ssh_agent_auth = true和指定了ssh_private_key_file,Packer会优先使用SSH Agent做认证,若Agent中未加载对应私钥就会认证失败。
- 解决方法二选一:
- 关闭SSH Agent认证:将配置中的
ssh_agent_auth改为false,强制Packer使用你指定的私钥文件做认证 - 将私钥添加到本地SSH Agent:执行命令
ssh-add /Users/movmac024/.ssh/mykey.pem后再运行Packer构建命令
- 关闭SSH Agent认证:将配置中的
核心原因2:本地私钥文件权限异常
SSH要求私钥文件仅当前用户可读写,权限过高会被SSH客户端拒绝使用。
- 解决方法:执行命令调整私钥权限:
chmod 600 /Users/movmac024/.ssh/mykey.pem
核心原因3:SSH用户名配置错误
不同操作系统的默认SSH用户名存在差异,你填写的var.ssh_username需要和源AMI的系统匹配:
- Amazon Linux/Amazon Linux 2 默认用户为
ec2-user - Ubuntu 默认用户为
ubuntu - CentOS 默认用户为
centos - RHEL 默认用户为
ec2-user - 自定义系统请确认你预设的可SSH登录的用户名
核心原因4:自定义源AMI无公钥注入能力
如果你使用的源AMI是自己的EC2快照制作的自定义镜像,且未预装cloud-init服务,AWS无法自动将你指定的ssh_keypair_name对应的公钥写入临时实例对应用户的~/.ssh/authorized_keys文件,导致公钥认证无匹配项。
- 解决方法二选一:
- 制作源快照前在原有EC2实例中预装
cloud-init服务,确保AWS可以正常注入公钥 - 制作源快照前,将你当前使用的密钥对的公钥提前写入实例对应用户的
~/.ssh/authorized_keys文件中,权限设为600
- 制作源快照前在原有EC2实例中预装
核心原因5:密钥对不匹配
确认你在配置中填写的ssh_keypair_name是AWS当前区域中存在的密钥对,且该密钥对的公钥和你本地的mykey.pem私钥是配对的,密钥混淆也会直接导致认证失败。
内容的提问来源于stack exchange,提问作者Carl
相关产品推荐
相关产品推荐

