1. 概述

Jenkins 是一个开源的自动化服务器,广泛用于自动化构建、测试和部署流程。它支持持续集成(CI)和持续交付(CD),并提供基于用户角色的权限控制。

默认情况下,Jenkins 会启用安全机制,要求用户登录后才能进行操作。但有时我们可能会忘记管理员账号的密码,导致无法访问 Jenkins 控制台。

本文将介绍几种通过命令行恢复 Jenkins 访问权限的方法:

  • 重置用户密码
  • 禁用安全机制
  • 创建临时管理员账号
  • 删除配置文件重置安全设置

⚠️ 注意:这些方法都需要 Jenkins 服务器的 SSH 权限,并且在操作前建议备份配置文件。


2. 通过修改主配置文件禁用安全设置

这是最直接的方法,适用于无法登录 Jenkins 控制台的情况。

2.1. 查找 Jenkins 主配置文件

Jenkins 的主配置文件 config.xml 通常位于以下路径之一:

  • 使用包管理器安装:/var/lib/jenkins/config.xml
  • 使用 WAR 文件安装:~/.jenkins/config.xml

如果不确定路径,可以使用如下命令查找:

find / -name config.xml

2.2. 禁用 Jenkins 安全机制

<useSecurity>true</useSecurity> 改为 <useSecurity>false</useSecurity>

<useSecurity>false</useSecurity>

如果无法使用编辑器,可以用 sed 命令快速替换:

sed -i 's/<useSecurity>true<\/useSecurity>/<useSecurity>false<\/useSecurity>/g' /var/lib/jenkins/config.xml

2.3. 重启 Jenkins

如果使用包管理器安装:

systemctl restart jenkins

如果使用 WAR 安装,则需要手动重启 Java 进程。

⚠️ 该方法会完全禁用 Jenkins 安全机制,不建议长期使用。


3. 通过修改用户配置重置密码

这种方法更安全,适合仅忘记某个用户的密码,尤其是管理员账号。

3.1. 查找用户配置文件

Jenkins 将每个用户的配置保存在 /var/lib/jenkins/users/ 目录下,结构如下:

<Jenkins_Working_Directory>/users/<Jenkins_User_Folder>/config.xml

例如:

/var/lib/jenkins/users/admin_123456789/config.xml

3.2. 生成 BCrypt 密码哈希

Jenkins 使用 BCrypt 算法存储密码。我们需要生成一个符合格式的哈希值。

✅ 推荐使用在线工具生成,例如:https://www.javainuse.com/onlineBcrypt

输入新密码(如 secret),生成的哈希可能为:

$2a$10$a7XcruSVvyb0.6ckv97/hOqqTuVx.qzuf7oq9He6HG7puq8DzYwFq

3.3. 更新配置文件

找到用户配置文件中的 <passwordHash> 字段,将其替换为:

<passwordHash>#jbcrypt:$2a$10$a7XcruSVvyb0.6ckv97/hOqqTuVx.qzuf7oq9He6HG7puq8DzYwFq</passwordHash>

⚠️ 注意:#jbcrypt: 前缀必须保留,否则 Jenkins 无法识别。

重启 Jenkins 后,新密码即可生效。


4. 创建临时管理员账号

如果管理员账号无法登录,可以创建一个临时管理员账号来恢复访问权限。

4.1. 启用注册功能

编辑主配置文件,将 <disableSignup>true</disableSignup> 改为:

<disableSignup>false</disableSignup>

重启 Jenkins。

4.2. 注册并赋予管理员权限

访问 Jenkins 登录页,点击“创建账户”注册新用户(如 myuser)。

编辑主配置文件,将新用户加入管理员角色:

<roleMap type="globalRoles">
    <role name="admin" pattern=".*">
        <permissions>
            ...
        </permissions>
        <assignedSIDs>
            <sid>myuser</sid>
        </assignedSIDs>
    </role>
</roleMap>

重启 Jenkins 后,使用新用户登录。

4.3. 修改原用户密码

进入 Manage Jenkins > Manage Users,选择原管理员账号并修改密码。

4.4. 清理临时账号

操作完成后,删除临时用户并清理配置文件:

  • 删除用户
  • <assignedSIDs> 中移除 myuser
  • <disableSignup> 改回 true

✅ 该方法不会破坏原有安全机制,适合生产环境使用。


5. 删除配置文件恢复访问权限

当其他方法都不可行时,可以考虑删除 Jenkins 配置文件来恢复访问权限。

⚠️ 此方法会重置所有配置,包括插件设置、用户权限、任务等。

5.1. 删除关键安全配置

使用如下命令删除安全相关字段:

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

重启 Jenkins 后,安全机制将被禁用。

5.2. 直接删除配置文件

删除 config.xml

rm -f /var/lib/jenkins/config.xml

重启 Jenkins 后,系统将自动生成默认配置文件。

⚠️ 此方法适用于彻底重置 Jenkins 环境,操作前请确认已备份关键数据。


6. 总结

方法 是否推荐 说明
禁用安全机制 简单但不安全
修改用户密码 推荐方式,仅影响目标用户
创建临时管理员账号 安全且不影响其他用户
删除配置文件 ⚠️ 仅在紧急情况下使用

在实际生产环境中,推荐使用 修改用户密码创建临时管理员账号 的方式来恢复 Jenkins 访问权限。

如需自动化处理,也可以将上述操作封装为脚本,便于快速恢复。


原始标题:Reset/Disable Jenkins Security Settings From Command Line