深入解析 Jenkins 默认密码:从初始访问到安全配置的完全指南

作为一名开发者或运维工程师,当我们第一次在服务器上搭建好 Jenkins 环境时,面对那个神秘的“解锁 Jenkins”页面,往往会产生一丝困惑。这个被严加看管的“初始管理员密码”到底是什么?它藏在哪里?当我们忘记了它又该怎么办?在这篇文章中,我们将深入探讨 Jenkins 默认密码的机制,不仅会带领大家找到这个关键的“钥匙”,还会分享如何通过命令行和界面进行故障排查,以及如何建立一个安全且便于管理的用户体系。我们将从实际操作出发,一步步拆解这些看似复杂但实际上非常有条理的配置过程。

为什么我们需要关注 Jenkins 的默认密码?

Jenkins 作为一个强大的开源自动化服务器,已经成为了现代持续集成和持续交付(CI/CD)流水线的核心组件。它不仅仅是一个简单的构建工具,更是连接开发、测试和生产环境的桥梁。通过使用 Jenkins 流水线,我们可以自动化从代码提交到应用部署的全过程,甚至可以触发 Terraform 来管理和配置我们的基础设施。

正因为 Jenkins 在我们的开发流程中扮演着如此关键的角色——它拥有部署到生产服务器的权限,访问敏感代码库的能力——它的安全性就显得尤为重要。当我们在服务器上完成 Jenkins 的自动安装(例如通过 Docker 容器或系统包管理器)后,系统出于对安全的最基本考虑,并不会让我们直接使用空密码登录,而是强制要求输入一个由系统自动生成的、高强度的初始密码。这是确保只有拥有服务器访问权限的人才能配置 Jenkins 的第一道防线。

探索默认密码的藏身之处

当我们第一次尝试访问 Jenkins 的 Web 界面(通常是 http://your-server-ip:8080)时,迎接我们的不是仪表盘,而是一个名为“解锁 Jenkins”的页面。这个页面要求我们输入“管理员密码”。那么,这个密码究竟在哪里呢?

默认存储路径详解

对于绝大多数标准的 Jenkins 安装(无论是直接安装在 Linux 系统上,还是运行在 Docker 容器中),初始管理员密码都安全地存储在服务器的一个特定文件中。默认的绝对路径如下:

# Jenkins 初始管理员密码的默认存储路径
/var/jenkins_home/secrets/initialAdminPassword

路径解析:

  • INLINECODEc1683595:这是 Jenkins 的主目录(JENKINSHOME),存储了所有的配置数据、工作空间和插件信息。如果你使用的是 Docker 容器,这个路径通常是容器内的挂载点。
  • /secrets/:这是一个专门用于存放敏感信息的子目录。
  • initialAdminPassword:这就是包含那个神秘密码的文本文件。

如何获取并使用该密码

作为拥有服务器访问权限的管理员,我们可以通过 SSH 或终端直接读取这个文件。让我们来看看具体的操作步骤和对应的代码示例。

操作场景:在 Docker 容器中查找密码

如果你是通过 Docker 运行 Jenkins 的,首先需要进入容器的 shell 环境。

# 1. 列出正在运行的容器,找到 Jenkins 容器的 ID 或名称
docker ps

# 2. 使用 exec 命令进入容器的 bash 环境
docker exec -it  /bin/bash

# 3. 进入容器后,直接使用 cat 命令查看密码文件
cat /var/jenkins_home/secrets/initialAdminPassword

操作场景:在 Linux 主机上直接查找

如果你将 Jenkins 直接安装在了宿主机上,操作会更加简单。

# 直接使用 cat 命令读取文件内容
# 通常需要使用 sudo 权限,因为该文件属于 Jenkins 用户
sudo cat /var/jenkins_home/secrets/initialAdminPassword

执行上述命令后,终端会输出一串看似随机的字母和数字组合(通常是一个 32 位的哈希值)。这就是我们需要用来解锁 Jenkins 的“金钥匙”。此时,我们只需复制这段字符串,将其粘贴到 Web 界面的“管理员密码”输入框中,点击“继续”,即可进入 Jenkins 的初始化向导。

从临时密码到永久账户:设置自定义用户

成功输入初始密码后,Jenkins 会引导我们进入“自定义 Jenkins”阶段。这是从“临时访问”迈向“长期管理”的关键一步。

插件安装与初始化

首先,系统会询问我们是否安装推荐的插件。作为最佳实践,对于初次使用的用户,我们通常建议选择“安装推荐的插件”。这些插件涵盖了 Git、Pipeline、Docker 等常用工具的集成,能够极大地提升后续的开发效率。

等待插件下载和安装的过程可能需要几分钟,具体取决于服务器的网络环境。如果在此过程中遇到某个插件安装失败,不用担心,我们可以稍后在“插件管理”页面中进行重试。

创建第一个管理员用户

插件安装完成后,Jenkins 会自动跳转到“创建第一个管理员用户”的页面。这是一个至关重要的步骤,因为之前使用的那个存储在文件中的密码只是临时的“入场券”。一旦我们创建了自定义用户,initialAdminPassword 文件中的密码实际上就完成了它的历史使命(尽管我们依然应该妥善保管服务器)。

在这个页面,我们需要填写以下信息:

  • 用户名:建议使用具有辨识度的名字,如 admin 或个人姓名。
  • 密码:设置一个强密码,并记录在密码管理器中。
  • 确认密码:再次输入以确保无误。
  • 全名:可选,用于在界面显示。
  • 电子邮件地址:用于接收系统通知(如构建失败的警报)。

填写完毕后,点击“保存并完成”。此刻,我们已经成功建立了 Jenkins 的身份认证体系。在随后的界面中,点击“开始使用 Jenkins”,我们就正式进入了功能强大的 Jenkins 仪表盘。

高阶故障排查:通过 CLI 移除或重置密码

在实际的生产环境维护中,我们可能会遇到一些棘手的情况。例如,某位离职的工程师修改了管理员密码却未交接,或者我们在配置 LDAP 认证时出了问题导致无法登录。当无法通过 Web 界面登录时,我们可以利用对服务器的直接访问权限(CLI)来重置安全设置。

重要提示: 以下操作涉及修改 Jenkins 的核心配置文件,建议在操作前先备份 config.xml

步骤 1:定位配置文件

首先,我们需要通过终端导航到 Jenkins 的主目录。

# 切换到 Jenkins 主目录
cd /var/jenkins_home

# 如果是在 Linux 宿主机上且路径不同,可能是
# cd /var/lib/jenkins

步骤 2:编辑 config.xml 禁用安全控制

在这个目录下,包含了一个名为 INLINECODE9ba808d9 的核心文件,它定义了 Jenkins 的全局行为,包括安全策略。我们可以使用 INLINECODE2a4f7555 或 nano 编辑器打开它。

# 使用 vim 编辑器打开配置文件
vim config.xml

我们需要找到 INLINECODE54bd0d2a 这一行。为了暂时解除登录限制(以便我们可以无密码登录并重置),我们将 INLINECODEf7d6aa47 修改为 INLINECODE1f2bdef9。同时,为了彻底移除之前的权限限制,我们还可以删除或注释掉 INLINECODE8af448de 和 INLINECODE7c0879bb 这两个部分的内容,但通常仅修改 INLINECODE7015c01e 就足够了。

修改前的代码片段:


NORMAL

true 

  true


修改后的代码片段:


NORMAL

false 


步骤 3:重启 Jenkins 服务

修改完配置文件并保存后,配置并不会立即生效。我们需要重启 Jenkins 服务以加载新的配置。

# 如果是使用 systemd 管理的服务
sudo systemctl restart jenkins

# 如果是在 Docker 容器中
docker restart 

# 或者,如果是通过 java -jar jenkins.war 方式启动的,需要杀掉进程并重新运行

步骤 4:重新配置用户

服务重启完毕后,我们再次刷新 Jenkins 的 Web 页面。此时,系统应该不会再要求我们输入密码,而是直接让我们进入了 Jenkins 的后台界面(拥有完全的匿名管理员权限)。

现在,我们可以进入“管理 Jenkins” -> “管理用户”页面。在这里,我们可以创建一个新的管理员账户,或者更新现有账户的密码。

安全收尾:

创建好能够登录的新账户后,务必记得重新编辑 INLINECODEbcac9b68,将 INLINECODEc0193015 改回 true,并再次重启 Jenkins。否则,你的 Jenkins 实例将向所有人开放,这是一个极大的安全风险。

最佳实践与安全建议

通过上面的探讨,我们不仅掌握了如何找到默认密码,还学会了如何在紧急情况下恢复访问权限。但在日常工作中,防患于未然才是最重要的。

1. 数据持久化与备份

在云原生时代,我们经常使用 Docker 来运行 Jenkins。为了防止容器删除后导致包括用户数据在内的配置丢失,我们应当始终将 /var/jenkins_home 目录挂载到宿主机的持久化卷上。

# 推荐的 Docker 启动命令示例
docker run -d \
  -p 8080:8080 \
  -v jenkins_data:/var/jenkins_home \
  --name my-jenkins \
  jenkins/jenkins:lts

2. 删除默认密码文件(可选)

一旦我们完成了初始化设置并成功登录了第一个自定义管理员账户,出于安全考虑,我们可以选择删除服务器上的 initialAdminPassword 文件。当然,这只是防止他人通过服务器文件直接窥探,因为 Web 界面已经不再需要它了。

# 删除初始密码文件
rm /var/jenkins_home/secrets/initialAdminPassword

3. 利用脚本自动化初始配置

对于需要频繁搭建测试环境的团队,每次手动点击和输入既低效又容易出错。我们可以编写 Groovy 脚本,利用 Jenkins 的启动脚本来自动创建管理员用户。这通常被称为“Jenkins 即代码”的一种体现。

示例:使用 Groovy 脚本创建用户

我们可以在 Jenkins 启动时执行以下 Groovy 脚本(通常放在 $JENKINS_HOME/init.groovy.d/ 目录下)来绕过向导,直接创建一个默认管理员:

// ensure-admin-user.groovy
import jenkins.model.*
import hudson.security.*

def instance = Jenkins.getInstance()

def hudsonRealm = new HudsonPrivateSecurityRealm(false)
// 添加用户:admin, 密码:admin123
hudsonRealm.createAccount("admin", "admin123") 
instance.setSecurityRealm(hudsonRealm)

def strategy = new FullControlOnceLoggedInAuthorizationStrategy()
strategy.setAllowAnonymousRead(false)
instance.setAuthorizationStrategy(strategy)

instance.save()

总结

从探寻 INLINECODEc48de34e 下的神秘字符,到掌握编辑 INLINECODEe5431e57 的“急救术”,我们在这篇文章中完整地梳理了 Jenkins 密码管理的方方面面。

我们了解到,Jenkins 默认密码机制的设计初衷是为了在 CI/CD 流水线建立之初就确立安全的基调。通过理解初始密码的获取方式,我们能够顺利地完成 Jenkins 的“成人礼”;通过掌握自定义用户的设置,我们确立了日常管理的身份认证体系;而通过学习命令行下的移除与重置方法,我们在面对突发故障时也能从容应对。

希望这篇指南能帮助你在构建高效、安全的自动化开发流程时更加得心应手。现在,你已经掌握了进入 Jenkins 世界的钥匙,去探索它强大的自动化能力吧!

> 常问问题(FAQ):

> Q: 如果我修改了初始密码文件后仍然无法登录怎么办?

> A: 请检查 Jenkins 的日志(通常在 /var/jenkins_home/logs/jenkins.log)以查看是否有错误信息。另外,确保你真的在 Web 界面点击了“继续”而不是在浏览器地址栏操作。

> Q: Docker 容器重启后密码会变吗?

> A: 只要你挂载了卷,初始化后的用户信息会保留。但如果每次都是全新容器且未挂载,你会需要再次查看新的 initialAdminPassword

声明:本站所有文章,如无特殊说明或标注,均为本站原创发布。任何个人或组织,在未征得本站同意时,禁止复制、盗用、采集、发布本站内容到任何网站、书籍等各类媒体平台。如若本站内容侵犯了原著者的合法权益,可联系我们进行处理。如需转载,请注明文章出处豆丁博客和来源网址。https://shluqu.cn/36106.html
点赞
0.00 平均评分 (0% 分数) - 0