我正在尝试设置 packer 和 ansible-remote 以便基于我现有的 ansible 脚本创建 AMI。但遇到了以下两个问题之一。
首先,SSH 出现问题,其中提示 "SSH Error: data could not be sent to the remote host. Make sure this host can be reached over ssh"。我在我的 ansible 配置中添加了 "connection: local" ,似乎已经解决了这个问题。
现在,我遇到了 ansible 提示 "sudo: a password is required" 的问题。因为我指定的用户拥有 NOPASSWD 的 sudo 访问权限,并通过 packer 设置的临时密钥验证了这一点,所以我不清楚为什么会出现这个问题。我尝试通过 packer 传递 ansible_become_user 和 ansible_become_pass 变量,但没有成功。看起来它现在可能正在尝试对我的本地连接进行 sudo,但需要密码吗?有什么办法可以正确地设置它呢? Packer:
首先,SSH 出现问题,其中提示 "SSH Error: data could not be sent to the remote host. Make sure this host can be reached over ssh"。我在我的 ansible 配置中添加了 "connection: local" ,似乎已经解决了这个问题。
现在,我遇到了 ansible 提示 "sudo: a password is required" 的问题。因为我指定的用户拥有 NOPASSWD 的 sudo 访问权限,并通过 packer 设置的临时密钥验证了这一点,所以我不清楚为什么会出现这个问题。我尝试通过 packer 传递 ansible_become_user 和 ansible_become_pass 变量,但没有成功。看起来它现在可能正在尝试对我的本地连接进行 sudo,但需要密码吗?有什么办法可以正确地设置它呢? Packer:
{
"variables": {
"aws_access_key": "",
"aws_secret_key": ""
},
"builders": [{
"type": "amazon-ebs",
"access_key": "{{user `aws_access_key`}}",
"secret_key": "{{user `aws_secret_key`}}",
"region": "us-east-1",
"subnet_id": "subnet-56343453",
"source_ami": "ami-61bbf104",
"instance_type": "t2.micro",
"ssh_username": "centos",
"ssh_pty" : true,
"ami_name": "packer-example {{timestamp}}"
}],
"provisioners": [
{
"type": "shell",
"inline": ["sudo sed -i 's/requiretty/!requiretty/' /etc/sudoers"]
},
{
"type": "ansible",
"playbook_file": "../config/site/packer.yml",
"user": "centos",
"ansible_env_vars": [ "ansible_become_user=centos", "ansible_become_pass=packer", "ANSIBLE_HOST_KEY_CHECKING=False", "ANSIBLE_SSH_ARGS='-o ForwardAgent=yes -o ControlMaster=auto -o ControlPersist=60s'" ]
}
]
}
Ansible:
---
- name: run base centos playbooks
hosts: all
connection: local
become: true
roles:
- base_centos7
connection: local
会在运行packer
的本地环境中运行 playbook,而不是在已经提供的实例上运行。 - Matthias Winkelmann