Ansible playbook 也无法在本地主机上运行,​​如何修复?

Ansible playbook 也无法在本地主机上运行,​​如何修复?

我在 centos 机器上运行 ansible

[ansadmin@ansible docker]$ ls
Dockerfile  hosts  simple-devops-image.yml  webapp.war
[ansadmin@ansible docker]$ cat hosts
localhost

简单的devops-image.yml

---
- hosts: all
  become: true

  tasks:
  - name: stop current running container
    command: docker stop simple-devops-container
    ignore_errors: yes

  - name: remove stopped container
    command: docker rm simple-devops-container
    ignore_errors: yes

  - name: remove docker image
    command: docker rmi simple-devops-image
    ignore_errors: yes

  - name: build docker image using war
    command: docker build -t simple-devops-image .
    args:
      chdir: /opt/docker
  - name: create container using simple image
    command: docker run -d --name simple-devops-container -p 8080:8080 simple-devops-image

即使在本地主机上,我也被拒绝权限。用户已经拥有 sudo 权限。

ansible-playbook -i hosts simple-devops-image.yml --check

PLAY [all] *************************************************************************************************************

TASK [Gathering Facts] *************************************************************************************************
fatal: [localhost]: UNREACHABLE! => {"changed": false, "msg": "Failed to connect to the host via ssh: ansadmin@localhost: Permission denied (publickey,gssapi-keyex,gssapi-with-mic,password).", "unreachable": true}

PLAY RECAP *************************************************************************************************************
localhost                  : ok=0    changed=0    unreachable=1    failed=0    skipped=0    rescued=0    ignored=0

ping 正常。

[ansadmin@ansible docker]$ ping localhost
PING localhost(localhost (::1)) 56 data bytes
64 bytes from localhost (::1): icmp_seq=1 ttl=64 time=0.024 ms
64 bytes from localhost (::1): icmp_seq=2 ttl=64 time=0.045 ms
64 bytes from localhost (::1): icmp_seq=3 ttl=64 time=0.045 ms

答案1

您不需要ssh连接localhost

只需更新您的hosts文件即可ansible_connection=local包含localhost

localhost ansible_connection=local

另外,确保您没有覆盖ansible_connectionssh其他任何地方。

答案2

失败的原因是您没有告诉 Ansible 要求输入密码,并且您尚未设置 SSH 密钥。

您的ssh-copy-id命令将您的 SSH 密钥复制到目标主机(在本例中为您所在的机器)并安装它,以便无密码 ​​SSH 可以工作。

其他方式要使其工作,需要将正确的标志添加到 playbook 命令中:

ansible-playbook playbook.yml -k

或者如果你还需要 sudo 密码:

ansible-playbook playbook.yml -bkK

  • 要求-k输入 SSH 用户的密码(“密钥”)
  • 告诉-bansible 提升为特权用户(默认使用 sudo)
  • 要求-K输入升级密码。

答案3

运行以下命令解决了该问题。

ssh-copy-id ansadmin@localhost

相关内容