未分类
jenkins更改admin密码
找了半天, 从页面上没找着修改admin超级管理员密码的地方,只能从配置文件着手了: Jenkins 配置文件存放在用户目录下.jenkins中 例如root用户在路径 /root/.jenkins/ 其他用户在 /home/user/.jenkins/ cd /root/.jenkins/ 在 .jenkins目录下有一个users目录,存放用户信息 cd users user目录下找到你的帐号目录,例如你的登录帐号是admin,那么目录就是admin cd admin 该目录下有个config.xml文件
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 |
<?xml version='1.0' encoding='UTF-8'?> <user> <fullName>admin</fullName> <properties> <jenkins.security.ApiTokenProperty> <apiToken>{AQAAABAAAAAwJXQ1lUdLbUrkaBQDoYajaS1pPTsw6PnANuI+HWeG5ZqyWTY+yAB5+NzlaJYcIx9yuGurOnl8hVNUn7sRR5c99A==}</apiToken> </jenkins.security.ApiTokenProperty> <hudson.model.MyViewsProperty> <views> <hudson.model.AllView> <owner class="hudson.model.MyViewsProperty" reference="../../.."/> <name>All</name> <filterExecutors>false</filterExecutors> <filterQueue>false</filterQueue> <properties class="hudson.model.View$PropertyList"/> </hudson.model.AllView> </views> </hudson.model.MyViewsProperty> <hudson.model.PaneStatusProperties> <collapsed/> </hudson.model.PaneStatusProperties> <hudson.search.UserSearchProperty> <insensitiveSearch>false</insensitiveSearch> </hudson.search.UserSearchProperty> <hudson.security.HudsonPrivateSecurityRealm_-Details> <passwordHash>#jbcrypt:$2a$12$4OqwS9bCDIh3YHsYo5ApJeEqedGF5ehgK1Ei0T1F2E6p6J1c8EhTu</passwordHash> </hudson.security.HudsonPrivateSecurityRealm_-Details> <jenkins.security.LastGrantedAuthoritiesProperty> <roles> <string>authenticated</string> </roles> <timestamp>1508771221297</timestamp> </jenkins.security.LastGrantedAuthoritiesProperty> </properties> </user> |
passwordHash 字段存放的是加密过后的密码 Jenkins的密码采用的是Java加解密工具 jBCrypt,我也是第一次接触到这种加密方式,实在被他惊叹到了!这种加密方式每次加密同一个明文竟然都是得到不一样的结果,那他又是通过怎样的方式来解密的呢?原来,他拿着用户的明文,和存储的密文去重新生成一串密文去判断。总结如下,它有以下特点: 关于bcrypt: 1、bcrypt是不可逆的加密算法,无法通过解密密文得到明文。 2、bcrypt和其他对称或非对称加密方式不同的是,不是直接解密得到明文,也不是二次加密比较密文,而是把明文和存储的密文一块运算得到另一个密文,如果这两个密文相同则验证成功。 下面, 用python生成加密后的密码:
1 2 3 4 |
#安装bcrypt pip install bcrypt 生成加密密码: bcrypt.hashpw("mypassword".encode('utf-8'), bcrypt.gensalt(prefix=b'2a')).decode('utf-8') |
修改 #jbcrypt:$2a$12$4OqwS9bCDIh3YHsYo5ApJeEqedGF5ehgK1Ei0T1F2E6p6J1c8EhTu 为 #jbcrypt:$2a$12$ldO4lUKecFxyMTgSntrVNuyaeRBIhN1onQvpXf2fQ1asnV6mkESBi 最后重启jenkins 注: 在python2里测试生成加密字符串的过程没有问题,但是在python3会报如下错误:
1 |
Unicode-objects must be encoded before hashing |
查找了下原因,是因为python3里,字符串有str和bytes两种形态,所以需要改成
1 |
bcrypt.hashpw(password2.encode(<span class="hljs-string">'utf-8'</span>), bcrypt.gensalt()).decode(<span class="hljs-string">'utf-8'</span>) |
另外,bcrypt有多种标准,我们需要的是2a,所以还要改成:
1 |
bcrypt.hashpw(password2.encode(<span class="hljs-string">'utf-8'</span>), bcrypt.gensalt(prefix=<span class="hljs-string">b'2a'</span>)).decode(<span class="hljs-string">'utf-8'</span>) |
这样就得到正确结果了。