如何使用密码文件更改Glassfish域的管理员密码?我知道在提示时手动输入密码的传统方法。
但是我想使用脚本更改管理员密码,我不需要手动输入密码。
答案 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”并(重新)启动服务器。