Ansible レプリケーションモジュールが失敗します。 「認証できましたが、宛先ディレクトリに対する権限がありません...」

Ansible レプリケーションモジュールが失敗します。 「認証できましたが、宛先ディレクトリに対する権限がありません...」

Ubuntu 18.04 VMでこのAnsible操作を使用すると、以下のメッセージで操作が失敗します。

「認証または権限が失敗しました。場合によっては認証できましたが、ターゲットディレクトリに対する権限がない可能性があります。ansible.cfgのリモートtmpパスを「/tmp \」にルートされたパスに変更することを検討してください。は次のとおりです。[...]( umask 77 && mkdir -p \"echo /home/alan-sysop/.ansible/tmp/ansible-tmp-1529057459.23-56386111798122\" &&

なぜ?

Debian 9 VMの場合、同じタスクを正常に完了できます。過去には、Ansibleを使用してUbuntu 16.04仮想マシンを正常に制御しました。

編集する:3つの詳細情報(オプション)でAnsibleを実行すると、-vvvより多くの出力があり、より具体的なエラーメッセージを見つけることができます。

mkdir: \xe2\x80\x98/home/alan-sysop/.ansible\xe2\x80\x99 ディレクトリを作成できません。権限が拒否されました。

Ansibleコマンドと出力(-v詳細レベル1)

$ 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   

Ansibleコマンドと出力(詳細-vvvレベル3)

$ 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の作業は成功しました。

$ 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   

(そして、ジョブは期待どおりに等しくなります。もう一度実行すると、システムはすでに必要な状態にあるため、変更する必要がないというメッセージが表示されます。)

$ 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   

Ansible 操作

スクリプトファイルはall-bootstrap.yml次のとおりです。

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

test-file.txt1行が含まれます:

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

アンサーブルバージョン

$ 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)]

Fedora Workstation 28リポジトリからインストールします。

ベストアンサー1

「mkdir:\xe2\x80\x98/home/alan-sysop/.ansible\xe2\x80\x99 ディレクトリを作成できません: 権限が拒否されました」と表示されます。

失敗したコマンドは、Ansibleを使用する前に発生したようです。 [1]sudo権限の理由でAnsibleを書き込めません。/home/alan-sysop/.ansible

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

私が知っている限り、仮想マシンでローカルにAnsibleコマンドを実行すると、無効な権限が発生します。sudo ansible-playbook -c local --limit ubuntu1804-vm ...以下を使用すると、これらの無効なansible-playbook -b -K -c local --limit ubuntu1804-vm ...権限を設定することを回避できます。


証拠

[1] 失敗したコマンドの実行方法を示す Ansible 詳細レベル 3 出力です。sudoどこにも使われていないようです。

<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; '/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')

おすすめ記事