我是否有办法在没有用户/密码的情况下从命令行重置所有安全设置(或仅禁用安全设置),因为我已经完全锁定了自己无法进入 Jenkins
?
我是否有办法在没有用户/密码的情况下从命令行重置所有安全设置(或仅禁用安全设置),因为我已经完全锁定了自己无法进入 Jenkins
?
最简单的解决方案是完全禁用安全性 - 在/var/lib/jenkins/config.xml
文件中将true
更改为false
。
<useSecurity>true</useSecurity>
一个一句话代码实现相同效果的方法:sed -i 's/<useSecurity>true<\/useSecurity>/<useSecurity>false<\/useSecurity>/g' /var/lib/jenkins/config.xml
然后重新启动Jenkins:
sudo service jenkins restart
然后转到管理面板并再次设置所有内容。
如果您在Kubernetes pod中运行Jenkins并且无法运行service
命令,则可以通过删除pod来重新启动Jenkins:
kubectl delete pod <jenkins-pod-name>
一旦命令被执行,Kubernetes将终止旧的Pod并启动一个新的Pod。
另一种方法是手动编辑您的用户配置文件(例如 /var/lib/jenkins/users/用户名/config.xml),并更新 passwordHash 的内容:
<passwordHash>#jbcrypt:$2a$10$razd3L1aXndFfBNHO95aj.IVrFydsxkcQCcLmujmFQzll3hcUrY7S</passwordHash>
完成此操作后,只需重新启动Jenkins,并使用此密码登录:
test
<passwordHash>
XML标签是<hudson.security.HudsonPrivateSecurityRealm_-Details>
的子级。
查看默认管理员用户,以了解完整的XML结构。 - ivandov<passwordHash>
元素在users/<username>/config.xml
中将接受以下格式的数据
salt:sha256("password{salt}")
如果您的盐值是bar
,密码是foo
,那么可以按照以下方式生成SHA256:
echo -n 'foo{bar}' | sha256sum
你应该得到7f128793bc057556756f4195fb72cdc5bd8c5a74dee655a6bfb59b4a4c4f4349
作为结果。将哈希和盐放入<passwordHash>
中:
<passwordHash>bar:7f128793bc057556756f4195fb72cdc5bd8c5a74dee655a6bfb59b4a4c4f4349</passwordHash>
重新启动Jenkins,然后尝试使用密码foo
登录。然后将您的密码重置为其他内容(Jenkins默认使用bcrypt,并且一轮SHA256不是存储密码的安全方式。重置密码时会存储一个bcrypt哈希值。)
PASSWORD_DIGEST="$(echo -n "${ADMIN_PASSWORD}{${SALT}}" | sha256sum | awk '{print $1}')"
echo "password digest: $PASSWORD_DIGEST"
sed -i -e "s#.* #${SALT}:${PASSWORD_DIGEST} #" "/usr/share/jenkins/ref/users/admin/config.xml"
sed -i -e "s#.* #${API_TOKEN} #" "/usr/share/jenkins/ref/users/admin/config.xml"
- Laurent Picquet我发现有问题的文件位于/var/lib/jenkins中的config.xml,修改该文件可以解决此问题。
/Applications/jenkins-2.19.3-0/apps/jenkins/jenkins_home/users/admin/config.xml
。 - siegy22将<useSecurity>true</useSecurity>
替换为<useSecurity>false</useSecurity>
删除<authorizationStrategy>
和<securityRealm>
保存并重新启动jenkins(sudo service jenkins restart)
修改的答案是正确的。但是,如果您启用了“基于项目的矩阵授权策略”,/var/lib/jenkins/config.xml
看起来应该是这样的。删除/var/lib/jenkins/config.xml
并重新启动jenkins也可以解决问题。我还删除了/var/lib/jenkins/users
中的用户,从零开始。
<authorizationStrategy class="hudson.security.ProjectMatrixAuthorizationStrategy">
<permission>hudson.model.Computer.Configure:jenkins-admin</permission>
<permission>hudson.model.Computer.Connect:jenkins-admin</permission>
<permission>hudson.model.Computer.Create:jenkins-admin</permission>
<permission>hudson.model.Computer.Delete:jenkins-admin</permission>
<permission>hudson.model.Computer.Disconnect:jenkins-admin</permission>
<!-- if this is missing for your user and it is the only one, bad luck -->
<permission>hudson.model.Hudson.Administer:jenkins-admin</permission>
<permission>hudson.model.Hudson.Read:jenkins-admin</permission>
<permission>hudson.model.Hudson.RunScripts:jenkins-admin</permission>
<permission>hudson.model.Item.Build:jenkins-admin</permission>
<permission>hudson.model.Item.Cancel:jenkins-admin</permission>
<permission>hudson.model.Item.Configure:jenkins-admin</permission>
<permission>hudson.model.Item.Create:jenkins-admin</permission>
<permission>hudson.model.Item.Delete:jenkins-admin</permission>
<permission>hudson.model.Item.Discover:jenkins-admin</permission>
<permission>hudson.model.Item.Read:jenkins-admin</permission>
<permission>hudson.model.Item.Workspace:jenkins-admin</permission>
<permission>hudson.model.View.Configure:jenkins-admin</permission>
<permission>hudson.model.View.Create:jenkins-admin</permission>
<permission>hudson.model.View.Delete:jenkins-admin</permission>
<permission>hudson.model.View.Read:jenkins-admin</permission>
</authorizationStrategy>
我们可以在保持安全性的前提下重置密码。
/var/lib/Jenkins/users/admin/中的config.xml文件类似于Linux或类UNIX系统中的/etc/shadow文件或Windows中的SAM文件,因为它存储帐户密码的哈希。
如果需要在未登录情况下重置密码,则可以编辑此文件,并用从bcrypt生成的新哈希替换旧哈希:
$ pip install bcrypt
$ python
>>> import bcrypt
>>> bcrypt.hashpw("yourpassword", bcrypt.gensalt(rounds=10, prefix=b"2a"))
'YOUR_HASH'
这将输出您的哈希值,并带有前缀2a,这是Jenkins哈希的正确前缀。
现在,编辑config.xml文件:
...
<passwordHash>#jbcrypt:REPLACE_THIS</passwordHash>
...
一旦您插入了新的哈希值,请重置Jenkins:
(如果您在使用systemd系统):
sudo systemctl restart Jenkins
你现在可以登录了,而且你没有将你的系统开着一秒钟。
hashpw
需要一个bytes
参数而不是str
,祝好 :) - Manuel Lazo为了在 Linux 中简单地禁用 Jenkins 安全性,请运行以下命令:
sudo ex +g/useSecurity/d +g/authorizationStrategy/d -scwq /var/lib/jenkins/config.xml
sudo /etc/init.d/jenkins restart
这将从您的config.xml
根配置文件中删除useSecurity
和authorizationStrategy
行,并重新启动您的Jenkins。
另请参阅:在Jenkins网站上禁用安全性
在获得对Jenkins的访问权限后,您可以通过选择访问控制/安全域在您的配置全局安全性页面中重新启用安全性。然后别忘了创建管理员用户。
config.xml
中,将disableSignup
设置为false
。config.xml
中,复制一个<permission>hudson.model.Hudson.Administer:username</permission>
行,并将username
替换为新用户。config.xml
中将disableSignup
设置回true
。可选清理:
config.xml
中的临时<permission>
行。此答案期间未对安全性造成任何伤害。
<assignedSIDs><sid>kapil</sid></assignedSIDs>
在config.xml文件中操作成功。 - Kapil Khandelwal假如您因为权限问题而不小心将自己锁出Jenkins,并且您没有服务器端的访问权限去切换至jenkins用户或root用户... 您可以在Jenkins中创建一个作业,并将以下内容添加至Shell脚本:
sed -i 's/<useSecurity>true/<useSecurity>false/' ~/config.xml
然后点击“立即构建”按钮并重新启动 Jenkins(如果需要的话,也可以重新启动服务器!)
ProjectMatrixAuthorization
后遇到了这个问题。当我进行更改并重新启动Jenkins时,我在Jenkins-UI中看到了一个Java异常。为了解决这个问题,我还删除了带有authorizationStrategy
的行,然后一切都恢复正常了。Jenkins在下一次启动时将其重新添加为空标记。 - Peter Schneider
sudo service jenkins restart
。 - MonoThreadedfind / -name "config.xml"
进行查找。 - Laser Hawk