Packer和Ansible SSH/Sudo
我试图建立打包机和ansible-remote来创建基于我的预先存在的可执行脚本的AMI。我碰到两个问题之一。Packer和Ansible SSH/Sudo
首先我遇到了SSH问题,我收到了SSH Error: data could not be sent to the remote host. Make sure this host can be reached over ssh
。我在我的配置文件中添加了connection: local
,似乎已经解决了这个问题。
现在我遇到来自Ansible的问题sudo: a password is required
。我不清楚为什么我指定的用户使用NOPASSWD访问sudo,并且我已通过使用包装员使用临时密钥的设置进行连接来验证这一点。我收到以下错误,并尝试通过ansible_become_user
和ansible_become_pass
作为变量通过封隔器运气不佳。这似乎也许它试图sudo对我的本地连接,但需要密码?任何想法如何正确设置。
帕克:
{
"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
我不认为你需要的用户的CentOS那里,因为你已经连接的用户的CentOS。
阿尔瓦罗
SSH Error: data could not be sent to the remote host. Make sure this host can be reached over ssh
此错误是通过使用ansible_python_interpreter固定=的/ usr /斌/ python3
由于封隔器生成清单文件,最好的办法是创建一个[ubuntu16] ansible组和在group_vars中将ansible_python_interpreter设置为/ usr/bin/python3
不幸的是,它看起来像一个连接问题。因为它只花了我几个小时来解决这个问题。
sudo密码问题将完全取决于您的源AMI(“source_ami”:“ami-61bbf104”)。
如果AMI是自我管理的,您将需要确保您使用'centos'的用户有能力sudo并提供其他安全措施(ssh密钥),您可以删除密码。或者,您可以在运行ansible时使用'--ask-become-pass'标志,但我不确定这与Packer的效果如何。
如果AMI是AWS管理的图像,我建议在Packer上使用'ec2-user',然后配置用户使用通用角色映射图像上的用户,并使用'become_user'向相关用户应用配置。
有用的链接:
可能是误读这一点,但它显示为'连接:local'会在本地运行的剧本,其中'packer'在运行,而不是在供应情况。 –
嘿,你是怎么解决这个问题的? 我现在在收集事实步骤中遇到了完全相同的错误。 数据无法发送到远程主机127.0.0.1。 我试过连接:本地正如MattW所说的,他是对的。 但没有它没有工作 – straykiwi