Packer and Ansible SSH/Sudo

3
我正在尝试设置 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:
{
  "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
嘿,你是怎么解决这个问题的? 我现在在收集信息步骤遇到了完全相同的错误。 数据无法发送到远程主机127.0.0.1。我尝试了像MattW说的那样使用connection:local,他是正确的。 但是如果没有它就不起作用。 - straykiwi
3个回答

1
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生成清单文件,最好的方法是创建一个[ubuntu16] ansible组,并在group_vars中将ansible_python_interpreter设置为/usr/bin/python3。
很不幸,它看起来像是一个连接问题。因为我花了几个小时才解决这个问题。

0

sudo密码问题完全取决于您的源AMI(“source_ami”:“ami-61bbf104”)。

如果AMI是自我管理的,则需要确保您使用的用户'centos'具有sudo的能力,并且提供了其他安全性(ssh密钥),则可以删除密码。或者在运行ansible时使用标志'--ask-become-pass',但我不确定这在Packer中是否有效。

如果AMI是AWS托管的映像,则建议使用'ec2-user'与Packer,然后使用公共角色配置映像上的用户,并使用'relevant users using 'become_user'应用配置。

有用的链接:


-1

我认为你不需要使用用户centos,因为你已经作为centos用户连接了。

阿尔瓦罗


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接