使用 Nexus 3 API 更改管理员密码

Use Nexus 3 API to change admin password

我想使用 Nexus 3 api 更改管理员默认密码以及使用 groovy 的电子邮件地址。但是我不明白如何使用 groovy api 设置密码。有人可以提供一个如何做到这一点的例子吗?

我原本以为 changePassword 已被弃用,但我错了。这是更新管理员电子邮件地址和更改密码的示例:

def user = security.securitySystem.getUser('admin')
user.setEmailAddress('admin@mycompany.com')
security.securitySystem.updateUser(user)
security.securitySystem.changePassword('admin','admin456')

Sonatype Nexus 具有更改管理密码内部 api 来更新管理员密码,但它不是直接使用,它使用的是使用 /service/rapture/session 端点创建的会话 ID。

curl -v 'https://<hostname>/service/rapture/session' --data 'username=<base64 username>&password=<base64 password>'

curl -v -X PUT 'https://<hostname>/service/rest/internal/ui/onboarding/change-admin-password' -H 'cookie: <NXSESSIONID form the above response>' --data '<plain text password>'

参考: https://github.com/sonatype/nexus-public/blob/9b177ab50bd7f8470b08247b146da459170ecc8f/plugins/nexus-onboarding-plugin/src/main/resources/static/rapture/NX/onboarding/step/ChangeAdminPasswordStep.js#L50

安装nexus3 cli:

pip install nexus3-cli

获取第一个初始密码(假设Nexus在docker中运行ning):

docker exec nexus cat /nexus-data/admin.password

设置环境变量:

export NEXUS3_PASSWORD=<PASSWORD FROM PREVIOUS STEP>
export NEXUS3_USERNAME=<USERNAME>
export NEXUS3_URL=<URL>

通过更新 /nexus-data/etc/nexus.properties 并附加以下行来允许远程脚本执行:

nexus.scripts.allowCreation=true

重新启动 nexus 服务以重新加载上次更改:

docker container restart <nexus>

创建一个包含以下内容的文件reset-password.groovy(感谢@Dennis Hoer):

def user = security.securitySystem.getUser('admin')
user.setEmailAddress('admin@mycompany.com')
security.securitySystem.updateUser(user)
security.securitySystem.changePassword('admin','admin456')

从命令行创建脚本和运行重置管理员密码的脚本:

nexus3 script create --script-type groovy passreset reset-password.groovy
nexus3 script run passreset 

密码现已重置

总结

您可以使用 REST API 更新用户信息和更改密码。这包括管理员用户。

Nexus REST API:更新用户信息

我的实例中的默认管理员 user-data.json 如下:

{
  "userId": "admin",
  "firstName": "Administrator",
  "lastName": "User",
  "emailAddress": "admin@example.org",
  "source": "default",
  "status": "active",
  "readOnly": false,
  "roles": [
    "nx-admin"
  ],
  "externalRoles": []
}

user-data.json 更新为您想要的值并使用 curl 和 REST API。

NX_PASSWORD="admin user password"

curl -ifu admin:"${NX_PASSWORD}" \
  -XPUT -H 'Content-Type: application/json' \
  --data "$(< user-data.json)" \
  <nexus base  URL>/service/rest/v1/security/users/admin

Nexus REST API:更改密码

您需要使用 Security Management API

Nexus 3 backend source code

OLD_PASSWORD="nexus admin password"
NEW_PASSWORD="your new password"

curl -ifu admin:"${OLD_PASSWORD}" \
  -XPUT -H 'Content-Type: text/plain' \
  --data "${NEW_PASSWORD}" \
  <nexus base URL>/service/rest/v1/security/users/admin/change-password

Nexus 文档的屏幕截图

此文档仅适用于 运行 Nexus 实例。您可以通过访问自己的 运行 Nexus 实例查看此 API:

  • 菜单:系统配置 > 系统 > API.

旧方法:在初始入职期间更改密码

这仅在初始入职期间有效。你应该绝对不要使用这种方法。只是记录完整性。

此部分用于在入职期间更改初始密码。

引用 Nexus 来源

您可以使用单个 curl 命令更改 admin 用户密码。

OLD_PASSWORD="initial nexus password"
NEW_PASSWORD="somepass"

curl -ifu admin:"${OLD_PASSWORD}" \
  -XPUT -H 'Content-Type: text/plain' \
  --data "${NEW_PASSWORD}" \
  <nexus base URL>/service/rest/internal/ui/onboarding/change-admin-password