簡體   English   中英

通過Apache Ansible:身份驗證或權限失敗

[英]Ansible through Apache: Authentication or permission failure

我嘗試通過Apache2 CGI運行Ansible。

這是我的腳本:

#!/usr/bin/env python
# -*- coding: UTF-8 -*-# enable debugging
print "Content-type: text/html"
print

import cgitb
cgitb.enable()
print "<html><head>"
print ""
print "</head><body>"

import os
import ansible.runner
import sys
results = ansible.runner.Runner(
#    transport='ssh',
#    remote_user='root',
#    remote_pass='pass',
    transport='local',
#    su='yes',
#    su_user='root',
#    su_pass='su_pass',
    sudo='yes',
    sudo_user='root',
    sudo_pass='sudo_pass',
    pattern='127.0.0.1',
    module_name='service',
    module_args='name=shoc-lxc-net state=started enabled=yes',
    forks=10,
).run()

if results is None:
   print "No hosts found"
   sys.exit(1)

import json
print(json.dumps(results,
                 default=lambda obj: vars(obj),
                 indent=1))

for (hostname, result) in results['contacted'].items():
    if not 'failed' in result:
        print "%s >>> %s" % (hostname, result['enabled'])

print "</body></html>"

當我運行它時,我得到:

{“ dark”:{“ 127.0.0.1”:{“ msg”:“身份驗證或權限失敗。在某些情況下,您可能已經可以進行身份​​驗證,並且對遠程目錄沒有權限。請考慮更改遠程臨時路徑失敗的命令是:mkdir -p $ HOME / .ansible / tmp / ansible-1420984254.94-125323999727459 && chmod a + rx $ HOME / .ansible / tmp / ansible。 -1420984254.94-125323999727459 && echo $ HOME / .ansible / tmp / ansible-1420984254.94-125323999727459,以結果1退出,“失敗”:true}},“ contacted”:{}}

但是,當我通過shell運行此腳本時,會得到:

$ /lxc/www/py/index.py 
Content-type: text/html

<html><head> </head><body> {  "dark": {},  "contacted": {  
"127.0.0.1": {    "invocation": {
    "module_name": "service",
    "module_args": "name=shoc-lxc-net state=started enabled=yes"    },    "state": "started",    "changed": false,    "enabled": true,   
"name": "shoc-lxc-net"   }  } }
127.0.0.1 >>> True

當我檢查時:

# ls -la /var/www/
total 20
drwxrwxrwx  4 root     root     4096 Jan 11 15:57 .
drwxr-xr-x 14 root     root     4096 Jan  8 15:58 ..
drwxr-xr-x  2 root     root     4096 Jan 11 14:54 etc
-rw-r--r--  1 root     root      177 Mar 18  2013 index.html
drwx------  2 www-data www-data 4096 Jan 11 15:36 .ssh
# su www-data
$ mkdir /var/www/.ansible/tmp -p
$
# ls -la /var/www/.ansible/
total 12
drwxrwxr-x 3 www-data www-data 4096 Jan 11 15:57 .
drwxrwxrwx 5 root     root     4096 Jan 11 15:57 ..
drwxrwxr-x 2 www-data www-data 4096 Jan 11 15:57 tmp

該腳本將以apache用戶(或您以apache用戶身份運行的任何用戶-在某些情況下可能是“沒人”或完全其他身份)運行。 該用戶很可能與您沒有相同的權限。 您可能需要setuid腳本以具有適當權限的用戶身份運行,或者將條目添加到/ etc / sudoers中,以允許腳本以其他用戶身份運行而無需提示輸入密碼,然后使用包裝外殼腳本具有Apache通過sudo調用腳本。

在Molecule中運行Ansible項目時遇到了相同的錯誤。 這是我發現的:

當運行命令molecule test --destroy=never我重現了與tmp文件夾/文件相同的問題。 如果我跳過destroy標志並僅運行molecule test -它將正常工作。

以社區成員的身份發布此答案可能會遇到此問題。 解決方法是,您可以在分子完成verify步驟之后,即將執行完成之前Ctrl+C也就是destroy

分子步驟:

└── default
    ├── lint
    ├── destroy
    ├── dependency
    ├── syntax
    ├── create
    ├── prepare
    ├── converge
    ├── idempotence
    ├── side_effect
    ├── verify
    └── destroy

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM