是否有一种方法来重置所有(或只是禁用安全设置)从命令行没有用户/密码,因为我已经设法完全锁定自己的詹金斯?


当前回答

\.jenkins\secrets\initialAdminPassword

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

其他回答

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

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

一旦你完成了这些,只要重新启动Jenkins并使用以下密码登录:

test

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

我们可以在打开安全系统的情况下重置密码。

/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

现在您可以登录了,而且您的系统一秒钟都没有打开。

使用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的任何其他命令都将失败。

很多时候你没有权限编辑config.xml文件。

最简单的方法是返回config.xml,然后使用sudo命令删除。

使用命令sudo /etc/init.重启jenkinsd / jenkins重启

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