背景:因为人员离职,nexus3 admin 密码丢失
备份
因为 nexus3 已经使用 docker 运行了很长时间, docker 启动所带的参数早已丢失(docker-compose 是一个好东西)。我们可以通过 runlike 这个命令找回当时启动这个容器的命令。
通过 runlike 命令,找到本地持久化目录为 /nexus-data。备份 security 文件夹
cp -rf /nexus-data/db/security /root/
下载对应版本二进制包
本来按照网上资料和官网文档,通过 docker exec -it 进入容器里面开启 OrientDB控制台,但是我这边失败,报 java.io.FileNotFoundException: .orientdb_history (No such file or directory)
没找到原因,进而转其他方法,启了一台虚拟机,配置好 JDK,下载对应的二进制包, 我这边是 nexus-3.10.0-04-unix.tar.gz,把该软解压到 /usr/local/ 下并重命名文件夹为 nexus
cd /usr/local/nexus/bin
./nexus run &
# 这里会生成我们需要的 jar 包
cd /usr/local/
tar zcvf nexus_20210628.tgz nexus
# 把 nexus_20210628.tgz 上传到 nexus 服务器上
更新密码
把 nexus_20210628.tgz 解压到 /usr/local/
# 进入OrientDB控制台:
java -jar /usr/local/nexus/lib/support/nexus-orient-console.jar
# 在控制台执行 (nexus-data 是本地持久化目录)
connect plocal:/nexus-data/db/security admin admin
# 重置密码为admin123:
update user SET password="$shiro1$SHA-512$1024$NE+wqQq/TmjZMvfI7ENh/g==$V4yPw8T64UQ6GfJfxYq2hLsVrBY8D1v+bktfOxGdt4b/9BthpWPNUy/CBk6V9iA0nHpzYzJFWO8v/tZFtES8CA==" UPSERT WHERE id="admin"
重启服务
# 确认目录权限是否一致
cd /nexus-data/db/security
# 这里的目录文件拥有者为 200,所以要把 root 权限的文件更改了
chown -R 200.200 /nexus-data/db/security
# 重启
docker restart nexus
验证
成功登陆后,不要忘了更改 admin 的密码
参考
https://support.sonatype.com/hc/en-us/articles/213467158-How-to-reset-a-forgotten-admin-password-in-Nexus-3-x
https://support.sonatype.com/hc/en-us/articles/115002930827-Accessing-the-OrientDB-Console