Falha no módulo de cópia Ansible no Ubuntu 18.04 - “você pode ter sido capaz de autenticar e não tem permissões no diretório de destino…”

1

Acho que já usei o Ansible para controlar uma VM Ubuntu 16.04. Eu definitivamente posso usar essa mesma tarefa para controlar com sucesso uma VM do Debian 9. No entanto, com uma VM do Ubuntu 18.04, ele falha com "Falha de autenticação ou permissão. Em alguns casos, você pode ter sido capaz de autenticar e não ter permissões no diretório de destino ..."

Por quê?

$ ansible-playbook -b -K -v playbooks/all-bootstrap.yml -l ubuntu1804-vm -t copy-test
Using /home/alan-sysop/ansible/ansible.cfg as config file
SUDO password: 

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

TASK [ansible-target : Basic test of copy module] ******************************
fatal: [ubuntu1804-vm]: UNREACHABLE! => {"changed": false, "msg": "Authentication or permission failure. In some cases, you may have been able to authenticate and did not have permissions on the target directory. Consider changing the remote tmp path in ansible.cfg to a path rooted in \"/tmp\". Failed command was: ( umask 77 && mkdir -p \"' echo /home/alan-sysop/.ansible/tmp/ansible-tmp-1529057459.23-56386111798122 '\" && echo ansible-tmp-1529057459.23-56386111798122=\"' echo /home/alan-sysop/.ansible/tmp/ansible-tmp-1529057459.23-56386111798122 '\" ), exited with result 1", "unreachable": true}

PLAY RECAP *********************************************************************
ubuntu1804-vm              : ok=0    changed=0    unreachable=1    failed=0   

EDIT: detalhamento extra mostra erro mais específico

Diz "mkdir: não é possível criar o diretório \ xe2 \ x80 \ x98 / home / alan-sysop / .ansible \ xe2 \ x80 \ x99: Permissão negada '.

$ ansible-playbook -b -K -vvv playbooks/all-bootstrap.yml -l ubuntu1804-vm -t copy-test
ansible-playbook 2.5.2
  config file = /home/alan-sysop/ansible/ansible.cfg
  configured module search path = [u'/home/alan-sysop/.ansible/plugins/modules', u'/usr/share/ansible/plugins/modules']
  ansible python module location = /usr/lib/python2.7/site-packages/ansible
  executable location = /usr/bin/ansible-playbook
  python version = 2.7.15 (default, May 16 2018, 17:50:09) [GCC 8.1.1 20180502 (Red Hat 8.1.1-1)]
Using /home/alan-sysop/ansible/ansible.cfg as config file
SUDO password: 
Parsed /home/alan-sysop/ansible/inventory inventory source with ini plugin
statically imported: /home/alan-sysop/ansible/roles/ansible-target/tasks/main-tasks.yml
statically imported: /home/alan-sysop/ansible/roles/ansible-target/tasks/raw.yml
statically imported: /home/alan-sysop/ansible/roles/ansible-target/tasks/nonraw.yml

PLAYBOOK: all-bootstrap.yml **************************************************************************************************************************
1 plays in playbooks/all-bootstrap.yml

PLAY [all] *******************************************************************************************************************************************
META: ran handlers

TASK [ansible-target : Basic test of copy module] ****************************************************************************************************
task path: /home/alan-sysop/ansible/roles/ansible-target/tasks/nonraw.yml:78
<ubuntu1804-vm.local> ESTABLISH SSH CONNECTION FOR USER: None
<ubuntu1804-vm.local> SSH: EXEC ssh -C -o ControlMaster=auto -o ControlPersist=60s -o KbdInteractiveAuthentication=no -o PreferredAuthentications=gssapi-with-mic,gssapi-keyex,hostbased,publickey -o PasswordAuthentication=no -o ConnectTimeout=10 -o ControlPath=/home/alan-sysop/.ansible/cp/2b9a0eeef8 ubuntu1804-vm.local '/bin/sh -c '"'"'echo ~ && sleep 0'"'"''
<ubuntu1804-vm.local> (0, '/home/alan-sysop\n', '')
<ubuntu1804-vm.local> ESTABLISH SSH CONNECTION FOR USER: None
<ubuntu1804-vm.local> SSH: EXEC ssh -C -o ControlMaster=auto -o ControlPersist=60s -o KbdInteractiveAuthentication=no -o PreferredAuthentications=gssapi-with-mic,gssapi-keyex,hostbased,publickey -o PasswordAuthentication=no -o ConnectTimeout=10 -o ControlPath=/home/alan-sysop/.ansible/cp/2b9a0eeef8 ubuntu1804-vm.local '/bin/sh -c '"'"'( umask 77 && mkdir -p "' echo /home/alan-sysop/.ansible/tmp/ansible-tmp-1529058132.74-222830721646724 '" && echo ansible-tmp-1529058132.74-222830721646724="' echo /home/alan-sysop/.ansible/tmp/ansible-tmp-1529058132.74-222830721646724 '" ) && sleep 0'"'"''
<ubuntu1804-vm.local> (1, '', 'mkdir: cannot create directory \xe2\x80\x98/home/alan-sysop/.ansible\xe2\x80\x99: Permission denied\n')
fatal: [ubuntu1804-vm]: UNREACHABLE! => {
    "changed": false, 
    "msg": "Authentication or permission failure. In some cases, you may have been able to authenticate and did not have permissions on the target directory. Consider changing the remote tmp path in ansible.cfg to a path rooted in \"/tmp\". Failed command was: ( umask 77 && mkdir -p \"' echo /home/alan-sysop/.ansible/tmp/ansible-tmp-1529058132.74-222830721646724 '\" && echo ansible-tmp-1529058132.74-222830721646724=\"' echo /home/alan-sysop/.ansible/tmp/ansible-tmp-1529058132.74-222830721646724 '\" ), exited with result 1", 
    "unreachable": true
}

PLAY RECAP *******************************************************************************************************************************************
ubuntu1804-vm              : ok=0    changed=0    unreachable=1    failed=0   

Debian 9 VM para comparação

$ ansible-playbook -b -K -v playbooks/all-bootstrap.yml -l debian9-vm -t copy-test
Using /home/alan-sysop/ansible/ansible.cfg as config file
SUDO password: 

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

TASK [ansible-target : Basic test of copy module] ******************************
changed: [debian9-vm] => {"changed": true, "checksum": "27b41e0724c1aa99931b9e753b639563e3996257", "dest": "/ansible-managed/ansible-target/test-file.txt", "gid": 0, "group": "root", "md5sum": "145fab51c12c1f30714dd15c536f0a7a", "mode": "0644", "owner": "root", "size": 56, "src": "/home/alan-sysop/.ansible/tmp/ansible-tmp-1529057600.23-245931452134186/source", "state": "file", "uid": 0}

PLAY RECAP *********************************************************************
debian9-vm                 : ok=1    changed=1    unreachable=0    failed=0   

(e o teste de idempotência:)

$ ansible-playbook -b -K -v playbooks/all-bootstrap.yml -l debian9-vm -t copy-test
Using /home/alan-sysop/ansible/ansible.cfg as config file
SUDO password: 

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

TASK [ansible-target : Basic test of copy module] ******************************
ok: [debian9-vm] => {"changed": false, "checksum": "27b41e0724c1aa99931b9e753b639563e3996257", "dest": "/ansible-managed/ansible-target/test-file.txt", "gid": 0, "group": "root", "mode": "0644", "owner": "root", "path": "/ansible-managed/ansible-target/test-file.txt", "size": 56, "state": "file", "uid": 0}

PLAY RECAP *********************************************************************
debian9-vm                 : ok=1    changed=0    unreachable=0    failed=0   

Tarefa Ansible

- name: Basic test of copy module
  copy:
    src: test-file.txt
    dest: /ansible-managed/ansible-target/
  tags: "copy-test"

test-file.txt contém uma única linha:

This file is used as a test of the Ansible copy module.

Versão Ansible

$ ansible-playbook --version
ansible-playbook 2.5.2
  config file = /home/alan-sysop/ansible/ansible.cfg
  configured module search path = [u'/home/alan-sysop/.ansible/plugins/modules', u'/usr/share/ansible/plugins/modules']
  ansible python module location = /usr/lib/python2.7/site-packages/ansible
  executable location = /usr/bin/ansible-playbook
  python version = 2.7.15 (default, May 16 2018, 17:50:09) [GCC 8.1.1 20180502 (Red Hat 8.1.1-1)]

como instalado a partir das reposições do Fedora Workstation 28.

    
por sourcejedi 15.06.2018 / 12:20

1 resposta

2

It says 'mkdir: cannot create directory \xe2\x80\x98/home/alan-sysop/.ansible\xe2\x80\x99: Permission denied'.

<ubuntu1804-vm.local> SSH: EXEC ssh -C -o ControlMaster=auto -o ControlPersist=60s -o KbdInteractiveAuthentication=no -o PreferredAuthentications=gssapi-with-mic,gssapi-keyex,hostbased,publickey -o PasswordAuthentication=no -o ConnectTimeout=10 -o ControlPath=/home/alan-sysop/.ansible/cp/2b9a0eeef8 ubuntu1804-vm.local '/bin/sh -c '"'"'( umask 77 && mkdir -p "' echo /home/alan-sysop/.ansible/tmp/ansible-tmp-1529058132.74-222830721646724 '" && echo ansible-tmp-1529058132.74-222830721646724="' echo /home/alan-sysop/.ansible/tmp/ansible-tmp-1529058132.74-222830721646724 '" ) && sleep 0'"'"'' <ubuntu1804-vm.local> (1, '', 'mkdir: cannot create directory \xe2\x80\x98/home/alan-sysop/.ansible\xe2\x80\x99: Permission denied\n')

O comando com falha parece acontecer antes que o Ansible use sudo . O Ansible não pode gravar em ~/.ansible por motivos de permissão

alan-sysop@ubuntu1804-vm:~$ ls -ld /home/alan-sysop/.ansible
drwx------ 3 root root 4096 Jun 14 20:33 /home/alan-sysop/.ansible

Acho que isso ocorreu porque eu corri o sudo ansible-playbook -c local --limit ubuntu1804-vm ... localmente na VM. Ou seja, o erro poderia ter sido evitado executando ansible-playbook -b -K -c local --limit ubuntu1804-vm ... .

Talvez o motivo pelo qual meu padrão parou de funcionar para mim seja algo semelhante ao comando umask 77 . Talvez Ansible adicionou em uma versão recente. A versão do Ansible que eu tinha rodado localmente na VM, era uma versão muito recente instalada do Ansible PPA -

$ ansible-playbook --version
ansible-playbook 2.5.4
  config file = /etc/ansible/ansible.cfg
  configured module search path = [u'/home/alan-sysop/.ansible/plugins/modules', u'/usr/share/ansible/plugins/modules']
  ansible python module location = /usr/lib/python2.7/dist-packages/ansible
  executable location = /usr/bin/ansible-playbook
  python version = 2.7.15rc1 (default, Apr 15 2018, 21:51:34) [GCC 7.3.0]
    
por 15.06.2018 / 12:34