Jenkins 从文件中设置用户 API 令牌而不是在 UI 中生成
Jenkins Set User API Token from file instead of generating in UI
有没有办法手动设置用户的 API 令牌?在 UI 它有一个按钮 "Change API Token" 生成令牌。相反,我想设置它。
我们的旧 jenkins 服务器崩溃了,我们必须创建一个新的。许多团队正在使用类似于下面的远程触发调用。 API 令牌的更改会影响所有这些团队,因为他们必须更新代码。
curl -X POST -H "$CRUMB" "http://automation:ef*****************************d@jenkins-url.com/job/log_deployment/buildWithParameters?token=B6472A215********************
UI 中的 API 标记是 32 个字符长。检查 jenkins/users//config.xml 中的文件后,有此 属性 jenkins.security.ApiTokenProperty。好像可以设置这个,需要一些方向。
<jenkins.security.ApiTokenProperty>
<apiToken>{AQAAABAAAAAwOROgeIy1vAUUOtGIYud+70TXY0pS/pKTe7nLeO8Xtd2BDgXW1RlZ6pL9+bvDrbwHh2xBnebPJAUS3OQt8f/toQ==}</apiToken>
</jenkins.security.ApiTokenProperty>
谢谢!
更新:更多信息来自
https://issues.jenkins-ci.org/browse/JENKINS-32776
User
passwords are stored as salted hashes (SHA-256 or bcrypt); whereas API tokens
are encrypted using an AES-128 ECB-mode block cipher, using a static key shared
among all users.
您不能显式设置给定令牌,因为 Jenkins 仅存储令牌的哈希值。
但是,您可以复制散列值,从而有效地复制 一个令牌。
要在具有不同全局加密密钥的不同主机之间执行此操作,您需要解密第一个主机的哈希值并将其用于设置第二个主机的哈希值。在 groovy 中可能最容易做到这一点。
有没有办法手动设置用户的 API 令牌?在 UI 它有一个按钮 "Change API Token" 生成令牌。相反,我想设置它。
我们的旧 jenkins 服务器崩溃了,我们必须创建一个新的。许多团队正在使用类似于下面的远程触发调用。 API 令牌的更改会影响所有这些团队,因为他们必须更新代码。
curl -X POST -H "$CRUMB" "http://automation:ef*****************************d@jenkins-url.com/job/log_deployment/buildWithParameters?token=B6472A215********************
UI 中的 API 标记是 32 个字符长。检查 jenkins/users//config.xml 中的文件后,有此 属性 jenkins.security.ApiTokenProperty。好像可以设置这个,需要一些方向。
<jenkins.security.ApiTokenProperty>
<apiToken>{AQAAABAAAAAwOROgeIy1vAUUOtGIYud+70TXY0pS/pKTe7nLeO8Xtd2BDgXW1RlZ6pL9+bvDrbwHh2xBnebPJAUS3OQt8f/toQ==}</apiToken>
</jenkins.security.ApiTokenProperty>
谢谢!
更新:更多信息来自 https://issues.jenkins-ci.org/browse/JENKINS-32776
User passwords are stored as salted hashes (SHA-256 or bcrypt); whereas API tokens are encrypted using an AES-128 ECB-mode block cipher, using a static key shared among all users.
您不能显式设置给定令牌,因为 Jenkins 仅存储令牌的哈希值。
但是,您可以复制散列值,从而有效地复制 一个令牌。
要在具有不同全局加密密钥的不同主机之间执行此操作,您需要解密第一个主机的哈希值并将其用于设置第二个主机的哈希值。在 groovy 中可能最容易做到这一点。