在 CentOS 上“重置 ZooKeeper 密码”这个说法,需要先明确一点:
ZooKeeper 本身默认是没有用户名/密码概念的,它依赖 ACL(访问控制列表) 来做权限控制。
所谓“密码”通常是指 ACL 中的认证信息(如 digest 模式的 user:password)。
下面按常见场景说明。
echo "getAcl /" | zkCli.sh -server 127.0.0.1:2181
如果看到类似:
'digest,'user:base64sha1hash
: cdrwa
说明使用了 digest 密码。
在 CentOS 上执行:
java -cp $(find / -name zookeeper-*.jar | head -1):$(find / -name slf4j-api-*.jar | head -1) org.apache.zookeeper.server.auth.DigestAuthenticationProvider user:newpassword
输出示例:
user:newpassword->user:sha1hash
zkCli.sh -server 127.0.0.1:2181
addauth digest user:oldpassword
然后修改 ACL:
setAcl / auth:user:newpassword:cdrwa
如果你 完全忘记密码,且没有任何 super 用户:
在 zoo.cfg 中配置:
superPassword=adminpass
重启 ZooKeeper:
systemctl restart zookeeper
# 或
zkServer.sh restart
登录:
zkCli.sh
addauth digest super:adminpass
然后重设 ACL:
setAcl / user:newpassword:cdrwa
⚠️ 生产环境慎用
systemctl stop zookeeper
mv /var/lib/zookeeper /var/lib/zookeeper.bak
systemctl start zookeeper
如果你是通过 Kafka / Hadoop / Solr 使用 ZooKeeper:
| 场景 | 解决方式 |
|---|---|
| 记得旧密码 | setAcl 修改 |
| 有 super 用户 | addauth digest super:xxx |
| 完全忘记 | 配置 super 或重置 dataDir |
| 测试环境 | 直接清空 dataDir |
如果你能告诉我:
我可以给你 更精确的命令。