amazon-web-services - Packer 和 Ansible SSH/Sudo

标签 amazon-web-services ansible packer

我正在尝试设置 packer 和 ansible-remote 以基于我预先存在的 ansible 脚本创建 AMI。我遇到了两个问题之一。

首先,我遇到了 SSH 问题,收到了 SSH 错误:数据无法发送到远程主机。确保可以通过 ssh 访问该主机。我在我的 ansible 配置中添加了 connection: local ,它似乎已经解决了这个问题。

现在我遇到了 Ansible 的问题 sudo:需要密码。我不清楚为什么我指定的用户具有 NOPASSWD 的 sudo 访问权限,并且我已经通过使用打包程序设置的临时 key 进行连接来验证这一点。我收到以下错误,并尝试通过打包程序将 ansible_become_useransible_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

最佳答案

SSH Error: data could not be sent to the remote host. Make sure this host can be reached over ssh

使用 ansible_python_interpreter=/usr/bin/python3 修复此错误

因为 packer 会生成 list 文件,所以最好的方法是创建一个 [ubuntu16] ansible 组,并在 group_vars 中将 ansible_python_interpreter 设置为/usr/bin/python3

不幸的是,这看起来像是连接问题。因为我只花了几个小时就解决了这个问题。

关于amazon-web-services - Packer 和 Ansible SSH/Sudo,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39713006/

相关文章:

Ansible:为服务分配唯一端口

python - 在 boto3 中使用 RDS 标签/如何在 boto3 中获取 ARN

amazon-web-services - 用于 eu-west-1 中资源的 us-east-1 中的 Terraform AWS ACM 证书

amazon-web-services - 错误 : NotAuthorizedError - Operation Denied on AWS eb init

yaml - 如何以正确的方式将变量分配给 Ansible 中的另一个变量?

ansible - 如何使用标签在ansible中的两个任务之间进行选择

ubuntu - Packer/Amazon EBS/Ubuntu - 不一致的 PPA

vagrant - 一个加壳器构建器可以依赖另一个构建器吗?

azure - 如何使用 cloud init 更改任何文件

amazon-web-services - 使用 AWS CloudFormation 申请 Amazon Connect 电话号码?