我想使用 Nexus 3 api 来更改管理员默认密码以及使用 groovy 的电子邮件地址。但我不明白如何使用 groovy api 设置密码。有人可以提供一个如何做到这一点的例子吗?
4 回答
概括
您可以使用 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
我原本以为 changePassword 已被弃用,但我错了。以下是更新管理员电子邮件地址和更改密码的示例:
def user = security.securitySystem.getUser('admin')
user.setEmailAddress('admin@mycompany.com')
security.securitySystem.updateUser(user)
security.securitySystem.changePassword('admin','admin456')
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>'
安装 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
密码现已重置