3

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

4

4 回答 4

2

概括

您可以使用 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:更改密码

您需要使用安全管理 API

请参阅Nexus 3 后端源代码

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 源

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

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
于 2020-08-17T22:12:38.320 回答
1

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

def user = security.securitySystem.getUser('admin')
user.setEmailAddress('admin@mycompany.com')
security.securitySystem.updateUser(user)
security.securitySystem.changePassword('admin','admin456')
于 2016-08-15T17:38:30.433 回答
0

Sonatype Nexus 有 change-admin-password 内部 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

于 2020-02-25T20:42:33.113 回答
0

安装 nexus3 cli:

pip install nexus3-cli

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

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 

密码现已重置

于 2020-07-25T23:52:59.587 回答