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

时间:2011-08-08 21:28:14

标签: linux security jenkins command-line

有没有办法在没有用户/密码的情况下从命令行重置所有(或者只是禁用安全设置),因为我设法将自己完全锁定在Jenkins之外?

23 个答案:

答案 0 :(得分:248)

最简单的解决方案是完全禁用安全性 - 将true更改为false文件中的/var/lib/jenkins/config.xml

<useSecurity>true</useSecurity>

然后通过

重新启动Jenkins
sudo service jenkins restart

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

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

kubectl delete pod <jenkins-pod-name>

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

答案 1 :(得分:155)

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

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

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

test

答案 2 :(得分:44)

我发现有问题的文件位于/ var / lib / jenkins中,名为config.xml,修改后修复了该问题。

答案 3 :(得分:35)

<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哈希值。)

答案 4 :(得分:21)

中无法找到El-Capitan config.xml
  

的/ var / lib中/詹金斯/

可在

中找到
  

〜/ .jenkins

然后在其他提到之后打开 config.xml 文件并进行以下更改

  • 使用input[:-len(input.lstrip("0123456789"))]

  • 替换<useSecurity>true</useSecurity>
  • 删除<useSecurity>false</useSecurity><authorizationStrategy>

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

答案 5 :(得分:18)

修改的答案是正确的。然而,我认为如果你激活了“基于项目的矩阵授权策略”,应该提到/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>

答案 6 :(得分:14)

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

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

它将从useSecurity根配置文件中删除authorizationStrategyconfig.xml行,然后重新启动Jenkins。

另请参阅:Jenkins网站上的Disable security

获得对Jenkins的访问权限后,您可以通过选择Access Control/Security Realm配置全局安全性页面中重新启用安全性。之后不要忘记create the admin user

答案 7 :(得分:14)

要重置而不禁用安全性,如果您正在使用矩阵权限(可能很容易适应其他登录方法):

  1. config.xml中,将 disableSignup 设为false
  2. 重新启动 Jenkins。
  3. 转到Jenkins网页,然后使用新用户注册
  4. config.xml中,复制其中一条<permission>hudson.model.Hudson.Administer:username</permission>行,并将 username 替换为新用户。
  5. 如果它是私人服务器,请在disableSignup中将 true 设置回config.xml
  6. 重新启动 Jenkins。
  7. 转到Jenkins网页,以新用户身份登录
  8. 重置原始用户的密码
  9. 以原始用户身份登录
  10. 可选清理:

    1. 删除新用户。
    2. 删除<permission>中的临时config.xml行。
    3. 在这个答案中没有任何证券受到伤害。

答案 8 :(得分:12)

由于权限错误,你不小心将自己锁定在Jenkins之外,并且你没有服务器端访问权限切换到jenkins用户或root ...你可以在Jenkins找一份工作并将其添加到Shell脚本:

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

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

答案 9 :(得分:9)

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

/ 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

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

答案 10 :(得分:5)

\.jenkins\secrets\initialAdminPassword

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

答案 11 :(得分:4)

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

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

在此文件中,您可以更改

中的代码
<useSecurity>true</useSecurity>

要,

<useSecurity>false</useSecurity>

答案 12 :(得分:4)

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

第2步:nano initialAdminPassword

您将获得密码

答案 13 :(得分:3)

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

的窗口

例如,如果Linux下的战争和管理员用户

  

/家/ “USER_NAME”/。詹金斯/用户/管理员/ config.xml中

在#jbcrypt:

之后转到此标记
<passwordHash>#jbcrypt:$2a$10$3DzCGLQr2oYXtcot4o0rB.wYi5kth6e45tcPpRFsuYqzLZfn1pcWK</passwordHash>

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

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

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

答案 14 :(得分:2)

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

请记住这一点,将<usesecurity>设置为false只会导致您遇到问题,因为这些说明在官方文档here中有提及。

答案 15 :(得分:1)

简单的方法是使用admin psw登录管理员用户:

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

如果您没有xclip,请安装xclip:

  • $ sudo apt-get install xclip

答案 16 :(得分:1)

  

詹金斯超过KUBENETES和Docker

对于 Kubernetes POD 管理的容器上的 Jenkins 有点复杂,因为:kubectl exec PODID --namespace=jenkins -it -- /bin/bash您将允许直接访问容器运行Jenkins,但您将无权访问sudovi并且许多命令都不可用,因此需要一种解决方法。

使用kubectl describe pod [...]查找运行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,更新已擦除),这要归功于持久性体积。

整个解决方案已在Google Kubernetes Engine上测试过。 的更新 请注意,即使没有root访问权限,您也可以显示纯文本密码{/ 1}}。

ps -aux

答案 17 :(得分:1)

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

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

使用命令sudo /etc/init.d/jenkins restart

重新启动jenkins

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

答案 18 :(得分:1)

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

Orders[orderId, ... ,status, orderDate, expiredTimeInSeconds].

我在这里一直对密码进行硬编码,但是根据需要它可以是用户输入。另外,请确保添加db.getCollection('orders').aggregate( [ { $match : {status:"C"}}, { $addFields: {expiryDate: { $add: [ "$orderDate", {$multiply:["$expiredTimeInSecond",1000]} ] } } }, { $match : {expiryDate: { $gt : new Date()}}}, { $limit : 100 } ] ) ,否则围绕Jenkins进行的其他任何命令都会失败。

答案 19 :(得分:0)

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

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

之后重新启动Jenkins。

答案 20 :(得分:0)

我有一个类似的问题,并在ArtB回复之后,

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

注意:手动修改此类XML文件存在风险。这样做需要您自担风险。由于我已被锁定,我没有太多损失。 AFAIK Worst案例我会删除〜/ .jenkins / config.xml文件,如上所述。

**指1. ssh到jenkins机器

  
      
  1. cd~ / .jenkins(我猜有些安装将它放在/var/lib/jenkins/config.xml下,但不是我的情况)
  2.   
  3. vi config.xml,在authorizationStrategy xml标签下,添加以下部分(仅使用我的用户名而不是“put-your-username”)
  4.   
  5. 重启jenkins。在我的情况下作为root服务tomcat7停止; ; service tomcat7 start
  6.   
  7. 尝试重新登录。 (为我工作)**
  8.   

下   

添加:

<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>

答案 21 :(得分:0)

要非常简单地禁用安全性和启动向导,请使用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在服务器启动之前不存在。

答案 22 :(得分:0)

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

brew services restart jenkins-lts