使用 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>'
安装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。
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
我想使用 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>'
安装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。
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