背景:因為人員離職,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