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 访问权限。
如需自动化处理,也可以将上述操作封装为脚本,便于快速恢复。