修改harbor账号密码
某一次harbor服务重启后无法登陆,密码肯定是正确的,但就是无法登陆,由于是内网部署,也无法使用邮箱找回之类的措施,所以就直接在harbor数据库中修改密码。 以下为笔记内容 。
毫无疑问我们只能进harbor的后台mysql进行修改,但是查资料发现,这个harbor中的mysql的密码是采用pbkdf2算法,调用的Hash函数为Sha1,迭代4096次,密钥长度为int型16位得出的,所以你常规的用明文密码去update是不行的,必须要通过算法将密钥算出来,然后update可以成功。
下面是密钥计算算法,计算明文为123QWEqwe, 盐值为gktqer4zml32472wmht9xeuixvg5pvjd, 迭代次数为4096, 密钥长度int型16位
运行环境为python2 版本, 注: python 3的模块名称已经修改,运行的时候会报错。
import hmac import hashlib from struct import Struct from operator import xor from itertools import izip, starmap _pack_int = Struct('>I').pack def pbkdf2_hex(data, salt, iterations=4096, keylen=16, hashfunc=None): return pbkdf2_bin(data, salt, iterations, keylen, hashfunc).encode('hex') def pbkdf2_bin(data, salt, iterations=4096, keylen=16, hashfunc=None): hashfunc = hashfunc or hashlib.sha1 mac = hmac.new(data, None, hashfunc) def _pseudorandom(x, mac=mac): h = mac.copy() h.update(x) return map(ord, h.digest()) buf = [] for block in xrange(1, -(-keylen // mac.digest_size) + 1): rv = u = _pseudorandom(salt + _pack_int(block)) for i in xrange(iterations - 1): u = _pseudorandom(''.join(map(chr, u))) rv = starmap(xor, izip(rv, u)) buf.extend(rv) return ''.join(map(chr, buf))[:keylen] rv = pbkdf2_hex('123QWEqwe', 'gktqer4zml32472wmht9xeuixvg5pvjd', 4096, 16) print(rv)
修改好明文密码和salt值后直接运行python文件
# python xx.py
500026b9f02e84d1f41e7546b9b2d524
现在开始修改harbor密码
docker exec -it b07b3206fea5 /bin/bash
psql (9.6.14)
Type "help" for help.
postgres=# help
You are using psql, the command-line interface to PostgreSQL.
Type: \copyright for distribution terms
\h for help with SQL commands
\? for help with psql commands
\g or terminate with semicolon to execute query
\q to quit
postgres=# psql -U postgres -d postgres -h 127.0.0.1 -p 5432 # 进入psttsql客户端
postgres=# \c registry #进入registry 数据库
You are now connected to database "registry" as user "postgres".
postgres=# select * from harbor_user; #查询所有用户
#更新用户密码 password会加密后的密码,salt为盐值,按select查询结果中显示的为准
postgres=# update harbor_user set password='500026b9f02e84d1f41e7546b9b2d524', salt='oafrcwi1rh83bem3cnfldltaw4cf9pqm' where username='admin';
postgres=# \q #退出postsql数据库
原文地址:https://www.cnblogs.com/xiaoshancun/p/12743733.html
- zephir-(9)类和对象2
- 深度学习中的动手实践:在CIFAR-10上进行图像分类
- 数据库中间件 MyCAT源码分析 —— XA分布式事务
- [喵咪Golang(1)]Go语言开篇
- phalcon-进阶篇2(拦截器)
- 【死磕Java并发】—–深入分析synchronized的实现原理
- phalcon-进阶篇1(过滤与清理)
- phalcon-入门篇9(view层基础使用)
- PhalApi视频教程
- 【学术】一文搞懂自编码器及其用途(含代码示例)
- PhalApi-Zip--压缩文件处理类
- PhalApi-Xhprof -- Facebook开源的轻量级PHP性能分析工具
- OpenAI发布8个模拟机器人环境以及一种HER实现,以训练实体机器人模型
- PhalApi-APK--APK文件解包处理
- JavaScript 教程
- JavaScript 编辑工具
- JavaScript 与HTML
- JavaScript 与Java
- JavaScript 数据结构
- JavaScript 基本数据类型
- JavaScript 特殊数据类型
- JavaScript 运算符
- JavaScript typeof 运算符
- JavaScript 表达式
- JavaScript 类型转换
- JavaScript 基本语法
- JavaScript 注释
- Javascript 基本处理流程
- Javascript 选择结构
- Javascript if 语句
- Javascript if 语句的嵌套
- Javascript switch 语句
- Javascript 循环结构
- Javascript 循环结构实例
- Javascript 跳转语句
- Javascript 控制语句总结
- Javascript 函数介绍
- Javascript 函数的定义
- Javascript 函数调用
- Javascript 几种特殊的函数
- JavaScript 内置函数简介
- Javascript eval() 函数
- Javascript isFinite() 函数
- Javascript isNaN() 函数
- parseInt() 与 parseFloat()
- escape() 与 unescape()
- Javascript 字符串介绍
- Javascript length属性
- javascript 字符串函数
- Javascript 日期对象简介
- Javascript 日期对象用途
- Date 对象属性和方法
- Javascript 数组是什么
- Javascript 创建数组
- Javascript 数组赋值与取值
- Javascript 数组属性和方法
- Array - 238. Product of Array Except Self
- Array - 209. Minimum Size Subarray Sum
- Array - 334. Increasing Triplet Subsequence
- Array - 123. Best Time to Buy and Sell Stock III
- Array - 122. Best Time to Buy and Sell Stock II
- Array - 121. Best Time to Buy and Sell Stock
- Array - 220. Contains Duplicate III
- Array - 219. Contains Duplicate II
- Array - 217. Contains Duplicate
- Array - 299. Bulls and Cows
- Array - 189. Rotate Array
- Array - 277 Find the Celebrity
- Array - 80. Remove Duplicates from Sorted Array II
- Array - 508. Wiggle Sort
- Array - 376. Wiggle Subsequence