是否有一种方法来重置所有(或只是禁用安全设置)从命令行没有用户/密码,因为我已经设法完全锁定自己的詹金斯?
当前回答
要在Linux中简单地禁用Jenkins安全性,运行以下命令:
sudo ex +g/useSecurity/d +g/authorizationStrategy/d -scwq /var/lib/jenkins/config.xml
sudo /etc/init.d/jenkins restart
它将从config.xml根配置文件中删除usesecsecurity和authorizationStrategy行,并重新启动Jenkins。
请参见:禁用Jenkins网站的安全性
在获得Jenkins的访问权限后,您可以在配置全局安全性页面中通过选择访问控制/安全领域重新启用安全性。之后不要忘记创建admin用户。
其他回答
使用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的任何其他命令都将失败。
在偶然的机会,你不小心锁定自己的Jenkins由于权限错误,你没有服务器端访问切换到Jenkins用户或根…你可以在Jenkins中创建一个作业,并将其添加到Shell脚本中:
sed -i 's/<useSecurity>true/<useSecurity>false/' ~/config.xml
然后单击Build Now并重新启动Jenkins(如果需要,也可以重启服务器!)
\.jenkins\secrets\initialAdminPassword
从initialAdminPassword文件复制密码,并将其粘贴到Jenkins中。
很多时候你没有权限编辑config.xml文件。
最简单的方法是返回config.xml,然后使用sudo命令删除。
使用命令sudo /etc/init.重启jenkinsd / jenkins重启
这将禁用Jenkins中的所有安全性,登录选项将消失
詹金斯对库贝努特斯和多克
kubectl exec PODID——namespace= Jenkins -it——/bin/bash将允许您直接访问运行Jenkins的容器,但您将没有根访问权限,sudo, vi和许多命令不可用,因此需要一个解决方案。
用kubectl描述pod[…]找到运行Pod的节点和容器ID (docker://…)
SSH进入节点 使用docker exec -ti -u root——/bin/bash以root权限访问容器 apt-get更新 Sudo apt-get安装vim
第二个区别是Jenkins配置文件被放置在与持久卷挂载点对应的不同路径中,即/var/jenkins_home,这个位置可能在将来会改变,运行df检查它。
然后禁用安全性-在/var/jenkins_home/jenkins/config.xml文件中将true改为false。
<useSecurity>false</useSecurity>
现在重新启动Jenkins就足够了,这个操作将导致容器和Pod死亡,它将在几秒钟内重新创建,并更新配置(并且由于持久卷,所有的机会都像vi,更新被擦除)。
整个解决方案已经在谷歌Kubernetes Engine上进行了测试。 更新 请注意,您也可以运行ps -aux,即使没有root访问权限,密码也会以纯文本显示。
jenkins@jenkins-87c47bbb8-g87nw:/$ps -aux
[...]
jenkins [..] -jar /usr/share/jenkins/jenkins.war --argumentsRealm.passwd.jenkins=password --argumentsRealm.roles.jenkins=admin
[...]
推荐文章
- 如何从终端/命令行调用VS代码编辑器
- 在Bash中检查变量是否存在于列表中
- 在Jar文件中运行类
- 查看PS命令的全部输出
- 如何在Windows命令提示符下运行.sh ?
- Linux命令将域名转换为IP
- 如何从命令行通过mysql运行一个查询?
- JavaScript:客户端验证与服务器端验证
- ASP。NET身份的默认密码散列器-它是如何工作的,它是安全的?
- 如何从命令行在windows中找到mysql数据目录
- 如何从命令行安装cygwin组件?
- 如何更改Git日志日期格式
- 如何使用GitHub Org Plugin从jenkins管道(jenkinsfile)触发另一个作业?
- 有效地测试Linux上的端口是否打开?
- 主体、使用者和主体之间的意义和区别是什么?