如何从命令行重置Jenkins安全设置?


217

有没有一种方法可以在没有用户名/密码的情况下从命令行重设所有(或只是禁用安全性设置),因为我设法完全将自己锁定在外面Jenkins

Answers:


275

最简单的解决方案是完全禁用安全-变化truefalse/var/lib/jenkins/config.xml文件中。

<useSecurity>true</useSecurity>

然后只需重新启动詹金斯,

sudo service jenkins restart

然后转到管理面板并再次设置所有内容。

如果您以为是从docker在k8s pod中运行Jenkins,这是我的情况,并且无法运行service命令,那么您可以通过删除pod来重新启动Jenkins:

kubectl delete pod <jenkins-pod-name>

发出命令后,k8将终止旧的pod并开始一个新的pod。


3
我需要重新启动Jenkins才能应用更改。
或Arbel 2014年

12
sudo service jenkins restart
2014年

10
对于那些找不到它的人,可以find / -name "config.xml" 在您的终端中使用config.xml 。
Laser Hawk'Mar

从命令用户安全标签重启jenking更改为假提示---后stackoverflow.com/questions/14869311/...
Anurag_BEHS

1
也可以在〜/ .jenkins /文件夹下找到文件
Andrii Abramov

181

另一种方法是手动为您的用户编辑配置文件(例如/var/lib/jenkins/users/username/config.xml)并更新passwordHash的内容:

<passwordHash>#jbcrypt:$2a$10$razd3L1aXndFfBNHO95aj.IVrFydsxkcQCcLmujmFQzll3hcUrY7S</passwordHash>

完成此操作后,只需重新启动Jenkins并使用以下密码登录:

test

1
如果该条目不存在怎么办-实际放置在哪里?
serup

2
<passwordHash>XML标签的孩子<hudson.security.HudsonPrivateSecurityRealm_-Details>。查看默认的admin用户以了解总体XML结构。
ivandov '16

2
这是确保安装安全的好方法。出于好奇,如何生成密码哈希?
kontextify

谢谢,这正是我所需要的!
马特·卡瓦纳

修改C:\ Users \ <USER> \。jenkins \ users \ admin中存在的文件内容有助于解决该问题
Sakshi Singla

45

我在/ var / lib / jenkins中找到了问题文件config.xml,对此文件进行了修改,从而解决了该问题。


1
我使用的是El-Capitan,在该位置找不到config.xml
Durai Amuthan.H

@ DuraiAmuthan.H您是否使用bitnami堆栈安装了它?配置文件将位于/Applications/jenkins-2.19.3-0/apps/jenkins/jenkins_home/users/admin/config.xml
siegy22'2

@ ryanzec,Nowakers答案使用相同的文件,但最好解释一下,您应该考虑接受它作为正确的答案。
卡图

我们将在高塞拉文件中找到该文件
prabakaran iOS

44

中的<passwordHash>元素users/<username>/config.xml将接受格式的数据

salt:sha256("password{salt}")

因此,如果您使用的是盐,bar而密码是,foo则可以这样生成SHA256:

echo -n 'foo{bar}' | sha256sum

您应该得到7f128793bc057556756f4195fb72cdc5bd8c5a74dee655a6bfb59b4a4c4f4349结果。将哈希值和盐一起放入<passwordHash>

<passwordHash>bar:7f128793bc057556756f4195fb72cdc5bd8c5a74dee655a6bfb59b4a4c4f4349</passwordHash>

重新启动Jenkins,然后尝试使用password登录foo。然后将您的密码重置为其他密码。(Jenkins默认情况下使用bcrypt,并且一轮SHA256并不是安全的密码存储方式。重置密码后,您将获得bcrypt哈希存储。)


1
这似乎不起作用。示例以#jbscrypt开头,然后定义加密字段$ 2a $ 10 $。这些是什么意思?
jrwren 2014年

我的回答对我有用。您看到的其他字段是针对其他哈希格式的。Jenkins用于处理哈希密码的库支持多种格式。您所指的jbcrypt格式比带有盐的sha256更安全,但是可以从命令行轻松生成sha256 + salt格式-记得练习的重点是回到Jenkins,然后从Jenkins的网络界面更改密码。
uckelman

这对我也不起作用。我会尽力找到bcrypt更多信息
洛朗·皮凯

它为我工作。我使用了以下命令:```PASSWORD_DIGEST =“ $(echo -n” $ {ADMIN_PASSWORD} {$ {SALT}}“ | sha256sum | awk'{print $ 1}')” echo“密码摘要:$ PASSWORD_DIGEST” sed -i -e“ s#<passwordHash>。* </ passwordHash>#<passwordHash> $ {SALT}:$ {PASSWORD_DIGEST} </ passwordHash>#”“ / usr / share / jenkins / ref / users / admin / config .xml“ sed -i -e” s#<apiToken>。* </ apiToken>#<apiToken> $ {API_TOKEN} </ apiToken>#“” / usr / share / jenkins / ref / users / admin / config。 xml“```
Laurent Picquet's

谢谢你。使用完全相同的值并像魅力一样工作。让自己回到过去并重设通行证。

26

在El-Capitan 中找不到config.xml

/ var / lib / jenkins /

它可用在

〜/ .jenkins

然后像其他提到的那样打开config.xml文件并进行以下更改

  • 在此替换<useSecurity>true</useSecurity><useSecurity>false</useSecurity>

  • 删除<authorizationStrategy><securityRealm>

  • 保存并重启jenkins(sudo service jenkins restart


我实际上无法编辑config.xml文件。当我尝试使用vim保存它时,它抛出一个只读文件,并且不允许进行使其具有写访问权限的操作。
Emjey

19

修改的答案是正确的。但是,/var/lib/jenkins/config.xml如果您激活了“基于项目的矩阵授权策略” ,那么我认为应该看起来像这样。删除/var/lib/jenkins/config.xml并重新启动詹金斯也可以解决问题。我也删除了用户,/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>

14

如果使用矩阵权限(很容易适应其他登录方法),则要在不禁用安全性的情况下重置它:

  1. 在中config.xml,设置disableSignupfalse
  2. 重新启动詹金斯。
  3. 转到Jenkins网页并注册一个新用户
  4. 在中config.xml,复制其中<permission>hudson.model.Hudson.Administer:username</permission>一行,并username用新用户替换。
  5. 如果是私人服务器,请disableSignup重新设置为truein config.xml
  6. 重新启动詹金斯。
  7. 转到Jenkins网页并以新用户身份登录
  8. 重置原始用户的密码
  9. 以原始用户身份登录

可选清理:

  1. 删除新用户。
  2. 删除中的临时<permission>config.xml

在此回答期间,没有证券受到损害。


添加到清除集disableSignup恢复为true,然后重新启动jenkins
Marc,

14

要在Linux中的简单步骤中禁用Jenkins安全性,请运行以下命令:

sudo ex +g/useSecurity/d +g/authorizationStrategy/d -scwq /var/lib/jenkins/config.xml
sudo /etc/init.d/jenkins restart

它会删除useSecurity,并authorizationStrategy从您的线条config.xml根的配置文件,然后重新启动您的詹金斯。

另请参阅:在詹金斯网站上禁用安全性


获得对Jenkins的访问权限后,您可以通过选择Access Control / Security Realm在“ 配置全局安全性”页面中重新启用安全性。之后,别忘了创建admin用户


它对我有用,但是,现在跳过授权。
hemanto

@hemanto您需要启用安全性才能重新启用授权。我已经更新了答案。
kenorb

12

在偶然的情况下,由于权限错误,您意外地将自己锁定在Jenkins之外,并且您没有服务器端访问权限以切换到jenkins用户或root用户。

sed -i 's/<useSecurity>true/<useSecurity>false/' ~/config.xml

然后单击立即构建并重新启动Jenkins(如果需要,请重新启动服务器!)


1
如果您将自己拒之门外,如何在詹金斯(Jenkins)创建工作?
GeroldBroser

在这种情况下,我先登录了一个普通的Chrome窗口,然后在退出主窗口之前更改了安全设置并在隐身窗口中进行了测试。测试不允许我登录,但是我的会话仍在主窗口中进行,因此我可以修复损坏。
尼克,

1
我相信我已更改的部分安全设置也意味着我的身份验证会话不再具有更改Jenkins安全配置的权限。
尼克,

激活后会遇到此问题ProjectMatrixAuthorization。进行更改并重新启动Jenkins时,我在Jenkins-UI中看到Java异常。为了解决这个问题,我也删除了与该行,authorizationStrategy这又可以了。詹金斯(Jenkins)在下一个开始时将其读为空标签。
彼得·施耐德

12

我们可以在保持安全性的同时重置密码。

/ var / lib / Jenkins / users / admin /中的config.xml文件的行为类似于/ etc / shadow文件Linux或类似UNIX的系统或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

您现在可以登录,并且没有让系统保持打开状态一秒钟。


5
\.jenkins\secrets\initialAdminPassword

从initialAdminPassword文件复制密码,然后将其粘贴到Jenkins中。


4

为了在Windows操作系统中默认删除jenkins的安全性,

您可以遍历在/users/{UserName}/.jenkins中创建的Config.xml文件。

在此文件中,您可以从以下位置更改代码

<useSecurity>true</useSecurity>

至,

<useSecurity>false</useSecurity>

4

1首先检查位置,如果您安装了war或Linux或基于Windows的Windows

例如,如果在Linux和管理员用户之间进行战争

/home/“User_NAME”/.jenkins/users/admin/config.xml

在#jbcrypt之后转到此标签:

<passwordHash>#jbcrypt:$2a$10$3DzCGLQr2oYXtcot4o0rB.wYi5kth6e45tcPpRFsuYqzLZfn1pcWK</passwordHash>

使用任何网站的bcrypt哈希生成器更改此密码

https://www.dailycred.com/article/bcrypt-calculator

确保它以$ 2a开头,因为这一个jenkens使用


4

步骤1:转到目录cd .jenkins / secrets,您将获得一个“ initialAdminPassword”。

步骤2:nano initialAdminPassword

你会得到一个密码


2

更改<useSecurity>true</useSecurity><useSecurity>false</useSecurity>还不够,您也应该同时删除<authorizationStrategy><securityRealm>元素,然后通过执行重新启动jenkins服务器sudo service jenkins restart

请记住,设置<usesecurity>false仅可能对您造成问题,因为此处的官方文档中已提及这些说明。


1

解决此问题的简单方法是使用admin psw登录您的admin用户:

  • 更改为root用户: sudo su -
  • 复制密码: xclip -sel clip < /var/lib/jenkins/secrets/initialAdminPassword
  • 以管理员身份登录并按 ctrl + v密码输入框。

如果没有,请安装xclip:

  • $ sudo apt-get install xclip

使用默认密码对我有用。为简单起见,您可以执行“ cat secrets / initialAdminPassword”,而不是一次性安装xclip。
Paul

有时此密码不存在。我不确定如何绕过此配置,但是对我来说,它不存在,我不得不编辑config.xml
vinicius.hisao

1

詹金斯通过KUBENETES和Docker

在的情况下,詹金斯在通过管理的容器Kubernetes POD是因为更复杂一点:kubectl exec PODID --namespace=jenkins -it -- /bin/bash你会允许直接访问到运行詹金斯容器,但你没有root访问权限sudovi和许多命令不可用,因此解决方法是必需的。

使用kubectl describe pod [...]查找运行你盘上的节点和容器ID(docker://...)

  • SSH 进入节点
  • 运行docker exec -ti -u root -- /bin/bash以Root特权访问容器
  • apt-get update
  • sudo apt-get install vim

第二个区别是Jenkins配置文件放置在与永久卷的安装点相对应的不同路径中,即/var/jenkins_home,此位置将来可能会更改,请检查其运行情况df

然后禁用安全性-在/var/jenkins_home/jenkins/config.xml文件中将true更改为false 。

<useSecurity>false</useSecurity>

现在,足以重新启动Jenkins,该操作将导致容器和Pod死亡,由于持久的卷,它将在几秒钟内再次创建,并更新了配置(并删除了vi,update等所有机会)。

整个解决方案已在Google Kubernetes Engine上进行了测试。 UPDATE 请注意,ps -aux即使没有超级用户访问权限,也可以纯文本形式显示密码。

jenkins@jenkins-87c47bbb8-g87nw:/$ps -aux
[...]
jenkins [..] -jar /usr/share/jenkins/jenkins.war --argumentsRealm.passwd.jenkins=password --argumentsRealm.roles.jenkins=admin
[...]

1

很多时候,您将无权编辑config.xml文件。

最简单的方法是config.xml使用sudo命令退回并删除。

使用以下命令重新启动詹金斯 sudo /etc/init.d/jenkins restart

这将禁用Jenkins中的所有安全性,并且登录选项将消失


如果可以使用sudo删除config.xml,也可以使用sudo对其进行编辑。例如sudo vi ...
Lee Meador

1

使用bcrypt可以解决此问题。为尝试使用bash和python自动化过程的人扩展@Reem答案。

#!/bin/bash

pip install bcrypt
yum install -y https://dl.fedoraproject.org/pub/epel/epel-release-latest-7.noarch.rpm
yum -y install xmlstarlet

cat > /tmp/jenkinsHash.py <<EOF
import bcrypt
import sys

if not sys.argv[1]:
  sys.exit(10)

plaintext_pwd=sys.argv[1]
encrypted_pwd=bcrypt.hashpw(sys.argv[1], bcrypt.gensalt(rounds=10, prefix=b"2a"))
isCorrect=bcrypt.checkpw(plaintext_pwd, encrypted_pwd)

if not isCorrect:
   sys.exit(20);

print "{}".format(encrypted_pwd)
EOF

chmod +x /tmp/jenkinsHash.py
cd /var/lib/jenkins/users/admin*
pwd
while (( 1 )); do
    echo "Waiting for Jenkins to generate admin user's config file ..."

    if [[ -f "./config.xml" ]]; then
        break
    fi

    sleep 10
done

echo "Admin config file created"

admin_password=$(python /tmp/jenkinsHash.py password 2>&1)

# Repalcing the new passowrd
xmlstarlet -q ed --inplace -u "/user/properties/hudson.security.HudsonPrivateSecurityRealm_-Details/passwordHash" -v '#jbcrypt:'"$admin_password" config.xml

# Restart
systemctl restart jenkins
sleep 10

我在这里将密码硬编码,但是根据需要它可以是用户输入。还请确保添加sleep其他内容,否则围绕Jenkins进行的任何其他命令都将失败。


1

要非常简单地禁用安全性和启动向导,请使用JAVA属性:

-Djenkins.install.runSetupWizard=false

这样做的好处是,您可以在Docker映像中使用它,这样您的容器将始终在没有登录屏幕的情况下立即启动:

# Dockerfile
FROM jenkins/jenkins:lts
ENV JAVA_OPTS -Djenkins.install.runSetupWizard=false

请注意,正如其他人所提到的,Jenkins config.xml位于/var/jenkins_home映像中,但是sed用于从Dockerfile对其进行修改失败,因为(大概)直到服务器启动,config.xml才存在。


0

我遇到了类似的问题,在收到ArtB的回复后,

我发现我的用户没有正确的配置。所以我做了什么:

注意:手动修改此类XML文件存在风险。自行承担风险。由于我已经被锁定在外,因此我没有太多损失。AFAIK最坏的情况是,我会删除〜/ .jenkins / config.xml文件,就像之前提到的那样。

**> 1. SSH到詹金斯机

  1. cd〜/ .jenkins(我猜有些安装将它放在/var/lib/jenkins/config.xml下,但在我看来不是)
  2. vi config.xml,并在authorizationStrategy xml标记下添加以下部分(仅使用我的用户名而不是“ put-your-username”)
  3. 重新启动詹金斯。在我的情况下,作为根服务tomcat7停止;; 服务tomcat7启动
  4. 尝试再次登录。(为我工作)**

加:

<permission>hudson.model.Computer.Build:put-your-username</permission>
<permission>hudson.model.Computer.Configure:put-your-username</permission>
<permission>hudson.model.Computer.Connect:put-your-username</permission>
<permission>hudson.model.Computer.Create:put-your-username</permission>
<permission>hudson.model.Computer.Delete:put-your-username</permission>
<permission>hudson.model.Computer.Disconnect:put-your-username</permission>
<permission>hudson.model.Hudson.Administer:put-your-username</permission>
<permission>hudson.model.Hudson.ConfigureUpdateCenter:put-your-username</permission>
<permission>hudson.model.Hudson.Read:put-your-username</permission>
<permission>hudson.model.Hudson.RunScripts:put-your-username</permission>
<permission>hudson.model.Hudson.UploadPlugins:put-your-username</permission>
<permission>hudson.model.Item.Build:put-your-username</permission>
<permission>hudson.model.Item.Cancel:put-your-username</permission>
<permission>hudson.model.Item.Configure:put-your-username</permission>
<permission>hudson.model.Item.Create:put-your-username</permission>
<permission>hudson.model.Item.Delete:put-your-username</permission>
<permission>hudson.model.Item.Discover:put-your-username</permission>
<permission>hudson.model.Item.Read:put-your-username</permission>
<permission>hudson.model.Item.Workspace:put-your-username</permission>
<permission>hudson.model.Run.Delete:put-your-username</permission>
<permission>hudson.model.Run.Update:put-your-username</permission>
<permission>hudson.model.View.Configure:put-your-username</permission>
<permission>hudson.model.View.Create:put-your-username</permission>
<permission>hudson.model.View.Delete:put-your-username</permission>
<permission>hudson.model.View.Read:put-your-username</permission>
<permission>hudson.scm.SCM.Tag:put-your-username</permission>

现在,您可以转到不同的方向。例如,我有github oauth集成,因此我可以尝试用以下内容替换authorizationStrategy:

注意:,它在我的情况下有效,因为我已经配置了特定的github oauth插件。因此,它比以前的解决方案更具风险。

  <authorizationStrategy class="org.jenkinsci.plugins.GithubAuthorizationStrategy" plugin="github-oauth@0.14">
    <rootACL>
      <organizationNameList class="linked-list">
        <string></string>
      </organizationNameList>
      <adminUserNameList class="linked-list">
        <string>put-your-username</string>
        <string>username2</string>
        <string>username3</string>
        <string>username_4_etc_put_username_that_will_become_administrator</string>
      </adminUserNameList>
      <authenticatedUserReadPermission>true</authenticatedUserReadPermission>
      <allowGithubWebHookPermission>false</allowGithubWebHookPermission>
      <allowCcTrayPermission>false</allowCcTrayPermission>
      <allowAnonymousReadPermission>false</allowAnonymousReadPermission>
    </rootACL>
  </authorizationStrategy>

0

编辑文件$ JENKINS_HOME / config.xml并使用以下命令更改安全性配置:

<authorizationStrategy class="hudson.security.AuthorizationStrategy$Unsecured"/>

之后,重新启动詹金斯。


0

对于使用macOS的用户,新版本只能由自制软件安装。因此要休息,此命令行必须使用:

brew services restart jenkins-lts
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.