【问题标题】:Use Nexus 3 API to change admin password使用 Nexus 3 API 更改管理员密码
【发布时间】:2020-08-18 07:55:41
【问题描述】:

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

【问题讨论】:

    标签: sonatype nexus3


    【解决方案1】:

    总结

    您可以使用 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
    

    【讨论】:

      【解决方案2】:

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

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

      【讨论】:

      【解决方案3】:

      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

      【讨论】:

        【解决方案4】:

        安装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-06-15
          • 2021-10-18
          • 1970-01-01
          • 2012-09-27
          • 1970-01-01
          • 1970-01-01
          • 2018-08-09
          • 2019-11-26
          • 2014-04-29
          相关资源
          最近更新 更多