现象: docker修改了配置,导致harbor无法登陆,按照网上给的教程,在数据库中重置了密码,但是还是登陆失败。
解决: 最近重装了harbor环境,看了下数据库,发现数据库中加密方式有区别,admin为sha256加密方式。修改脚本后,算出来和数据库中的值完全相同。bingo~~
计算密码脚本:
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
hashfunc = hashfunc or hashlib.sha256 # 加密方式是sha256
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('Harbor12345', 'Y3fhnlvqtqzBwEcU8IWVTJJW7R8hjN4r', 4096, 16)
print(rv)
- 注意点:
- 盐值和数据库中保持一致
- 检查数据库中加密方式一列

版权声明:本文为dou_d原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接和本声明。