Ansible get_url无法下载受基本身份验证保护

时间:2015-08-07 17:30:25

标签: ansible ansible-playbook

我正在尝试使用带有get_url模块的远程服务器使用HTTP下载受保护的文件,但用户名密码似乎未在请求中传递,因此任务失败。

我正在使用Ansible 1.9.2

这是我正在使用的get_url定义:

virtualenv

这是我得到的错误:

- name: Downloading Artifact
  get_url:  
    url: "http://myserver/somefile.tar.gz" 
    dest: "/home/jdoe/somefile.tar.gz"
    url_username: "jdoe"
    url_password: "mysecret"
    mode: 0600

现在,我尝试使用cURL下载该文件,它可以正常工作。

任何帮助都会受到赞赏,因为我已经为此困难了2天。

3 个答案:

答案 0 :(得分:1)

您可以使用uri模块:

---                                             

- hosts: hostname                                

  tasks:                                        

  - name: "download file"                       
    uri:                                        
      url: "http://somedomain.com/file.json"    
      method: GET                               
      user: "{{ somedomain.user }}"            
      password: "{{ somedomain.password }}"    
      force_basic_auth: yes                    
      dest: /tmp/somedomain.file.json           
      return_content: yes                       

如果这不起作用,可能会与httplib2库版本有关。

答案 1 :(得分:0)

问题是您的服务器没有返回401状态,因此httplib2库可以在之后通过BASIC身份验证凭据发送。解决方案是升级到ansible> = 2.0并使用force_basic_auth:True以便从一开始就使用BASIC身份验证凭据。

答案 2 :(得分:0)

我在 ansible 2.9 中遇到了类似的问题。 结果 curl 也得到了 HTTP 403,但仍然显示内容。 GET_URL 模块更严格。

对我来说,这个问题是通过从默认的 Apache 欢迎页面切换到定制的。