首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Ansible jenkins_plugin模块返回"HTTP 403:请求中没有包含有效的碎屑“

Ansible jenkins_plugin模块返回"HTTP 403:请求中没有包含有效的碎屑“
EN

Stack Overflow用户
提问于 2019-08-30 10:21:23
回答 6查看 5.5K关注 0票数 4

我使用Ansible (v2.8)作为Packer模板后面的提供程序,为Jenkins主节点构建AMI。对于以前的版本,剧本已成功通过。但是,在Jenkins 2.176.3版本中,jenkins_plugin模块一直在抛出:

HTTP错误403:请求中没有包含任何有效的crumb。

我已经检索了残渣,并将其注册在一个变量中。我尝试过使用jenkins_plugin字段将其传递给http_agent,但这是行不通的。我试过使用attributes,但这也没有帮助。除非我错过了一些令人难以置信的基本的东西,否则我已经到了极限。

代码语言:javascript
复制
- name:               Get Jenkins Crumb
  uri:
    force_basic_auth: yes
    url_username:     ****
    url_password:     ****
    url:              http://localhost:8080/crumbIssuer/api/json
    return_content:   yes
  register:           jenkins_crumb
  until:              jenkins_crumb.content.find('Please wait while Jenkins is getting ready') == -1
  retries:            10
  delay:              5

- name:               Install plugin
  jenkins_plugin:
    name:             "{{ item }}"
    version:          latest
    force_basic_auth: yes
    url_username:     ****
    url_password:     ****
    http_agent:       "Jenkins-Crumb:{{ jenkins_crumb.json.crumb }}"
  with_items:         "{{ jenkins_plugins }}"

我希望安装插件和一个构建愉快的AMI。我得到的是"HTTP错误403:请求中没有包含有效的碎屑“,而Packer构建失败了。

EN

回答 6

Stack Overflow用户

回答已采纳

发布于 2019-08-30 15:38:36

看起来像对2.176 LTS释放中的crumb发行者的更改,强制包含初始令牌生成调用的web会话id,以及随后使用的调用中的crumb。

CSRF令牌(crumbs)现在只对它们创建的web会话有效,以限制攻击者获取它们的影响。使用/crumbIssuer/api获取碎屑的脚本现在将无法执行受CSRF保护的操作,除非脚本在随后的请求中保留web会话ID。

除了建议您暂时禁用CSRF之外,同一文档还建议您只能禁用新功能,而不能将CSRF作为一个整体来禁用,这应该允许您的packer/ansible按照以前编写的方式完成。

若要禁用此改进,可以将系统属性hudson.security.csrf.DefaultCrumbIssuer.EXCLUDE_SESSION_ID设置为true。

编辑:

/etc/default/jenkins中添加以下行清除了我自己的剧本中的CSRF问题(Ansible 2.8.4,Ubuntu18.04,OpenJDK 11.0.4)

代码语言:javascript
复制
JAVA_ARGS="$JAVA_ARGS -Dhudson.security.csrf.DefaultCrumbIssuer.EXCLUDE_SESSION_ID=true"

在工具维护人员赶上API变化之前,这可能是一个很好的拐杖。

票数 8
EN

Stack Overflow用户

发布于 2019-09-02 09:56:46

我也面临着这个问题,并且给出了指针,在一个会话中需要完成的工作,我为ansible打开了一个PR:

https://github.com/ansible/ansible/issues/61672 https://github.com/ansible/ansible/issues/61673

这是一个小的改变,它应该是可能的修补您的本地安装。

更新:该修补程序应用于Ansbile v2.8.9v2.9.1,如果您有较早的版本,请确保升级ansible。

票数 2
EN

Stack Overflow用户

发布于 2019-09-11 13:55:30

“这正是”runningEagle“提到的原因。您需要将初始会话cookie值传播到所有后续请求,同时还需要将其传播到crumb。

所需的新的Ansible代码修改:

代码语言:javascript
复制
...

# Requesting the crumb
uri:
  url: "<crumb_URL>"
register: response

...

# Actual action request
uri:
  url: "<action_URL>"
  headers: '{ ... , "Cookie": "{{ response.set_cookie }}", ... }'

...
票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/57724934

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档