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.txt
1行が含まれます:
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')
答え2
Linux では、一部のディスク障害や破損により、ファイルシステムを読み取り専用で自動的に再マウントすることがあります。私の場合、これは起こりましたが、宛先を書くことができず、同じメッセージが表示されました。場合によっては、「mount -oremount、rw file system」コマンドを使用して問題を解決するか、可能であれば再起動する必要があります。 「言い換えれば、私の場合でもそのようなことが起こりました」あなたにもこのようなことが起こるかどうかを見てください。