我使用Ansible (v2.8)作为Packer模板后面的提供程序,为Jenkins主节点构建AMI。对于以前的版本,剧本已成功通过。但是,在Jenkins 2.176.3版本中,jenkins_plugin模块一直在抛出:
HTTP错误403:请求中没有包含任何有效的crumb。
我已经检索了残渣,并将其注册在一个变量中。我尝试过使用jenkins_plugin字段将其传递给http_agent,但这是行不通的。我试过使用attributes,但这也没有帮助。除非我错过了一些令人难以置信的基本的东西,否则我已经到了极限。
- 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构建失败了。
发布于 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)
JAVA_ARGS="$JAVA_ARGS -Dhudson.security.csrf.DefaultCrumbIssuer.EXCLUDE_SESSION_ID=true"在工具维护人员赶上API变化之前,这可能是一个很好的拐杖。
发布于 2019-09-02 09:56:46
我也面临着这个问题,并且给出了指针,在一个会话中需要完成的工作,我为ansible打开了一个PR:
https://github.com/ansible/ansible/issues/61672 https://github.com/ansible/ansible/issues/61673
这是一个小的改变,它应该是可能的修补您的本地安装。
发布于 2019-09-11 13:55:30
“这正是”runningEagle“提到的原因。您需要将初始会话cookie值传播到所有后续请求,同时还需要将其传播到crumb。
所需的新的Ansible代码修改:
...
# Requesting the crumb
uri:
url: "<crumb_URL>"
register: response
...
# Actual action request
uri:
url: "<action_URL>"
headers: '{ ... , "Cookie": "{{ response.set_cookie }}", ... }'
...https://stackoverflow.com/questions/57724934
复制相似问题