Glassfish更改管理员密码

时间:2017-02-01 07:29:14

标签: glassfish-3

如何使用密码文件更改Glassfish域的管理员密码?我知道在提示时手动输入密码的传统方法。

但是我想使用脚本更改管理员密码,我不需要手动输入密码。

3 个答案:

答案 0 :(得分:3)

这是可能的,但如果您想以最简单的方式完全编写脚本,则需要2个密码文件。

创建一个临时文件(我的示例中为tmpfile),该文件将保存当前密码(默认为空)和所需的新密码:

  

AS_ADMIN_PASSWORD =
  AS_ADMIN_NEWPASSWORD = myNewPassword

现在创建一个密码(我的示例中为pwdfile)文件,其中包含更改的管理员密码:

  

AS_ADMIN_PASSWORD = myNewPassword

然后,您可以使用以下命令使用这些文件更改密码,确保在更改密码时使用tmpfile,然后再使用pwdfile

 $PAYARA_PATH/bin/asadmin start-domain
 $PAYARA_PATH/bin/asadmin --user $ADMIN_USER --passwordfile=/opt/tmpfile change-admin-password
 $PAYARA_PATH/bin/asadmin --user $ADMIN_USER --passwordfile=/opt/pwdfile enable-secure-admin
 $PAYARA_PATH/bin/asadmin restart-domain

This example was adapted from the way the Payara Server dockerfile works

答案 1 :(得分:0)

据我所知,出于安全原因,不可能通过文件将其更改为参数。

您可以考虑替代解决方案(管道),但始终需要确认密码。 https://docs.oracle.com/cd/E19798-01/821-1758/change-admin-password-1/index.html

答案 2 :(得分:0)

对于仍对手动设置管理员帐户密码感兴趣的任何人:

我试图根据Payara Repo的当前实现来生成位于“ glassfish / domains / {ACTIVE_DOMAIN_NAME} / config / admin-keyfile”中的“ admin-keyfile”的内容。当访问端口4848下的管理界面时,此文件(作为FileRealm的数据源)用于验证管理用户。

此文本文件的每一行代表一个帐户,其结构为

  

USERNAME; PASSWORD; GROUPS

“ PASSWORD”字段的前缀是哈希算法关键字(用大括号括起来,例如“ SSHA”或“ SSHA256”),后跟BASE64编码的盐腌哈希和盐值本身(一些随机字节) ):

  

{SSHA} BASE64(SHA(password,salt),salt)

长话短说:如果要手动生成用户帐户,则可以例如使用以下Python脚本:

import hashlib
from base64 import b64encode
from secrets import token_bytes
from getpass import getpass

username = 'admin' # input('Username: ')
plainTextPassword = getpass()
randomSalt = token_bytes(8)
passwordHash = hashlib.sha256()
passwordHash.update(plainTextPassword.encode('utf-8'))
passwordHash.update(randomSalt)
passwordDigest = passwordHash.digest()
# cryptic range reflects the strange implementation... feel free to change it to "range(98)"
# https://github.com/payara/Payara/blob/6488cbdc90fd0f6c42de6a42affcd09f697be715/nucleus/common/common-util/src/main/java/org/glassfish/security/common/SSHA.java#L108
for run in range(2, 101):
    passwordHash = hashlib.sha256()
    passwordHash.update(passwordDigest)
    passwordDigest = passwordHash.digest()
saltedHashAndSalt = b64encode(passwordDigest + randomSalt).decode('utf-8')
result = '{0};{{SSHA256}}{1};asadmin'.format(username, saltedHashAndSalt)
print(result)

将控制台输出插入“ admin-keyfile”并(重新)启动服务器。