小能豆

Vcenter6.0执行STS更新脚本fixsts.sh报错

javascript

./fixsts.sh: line 60: administrator@${DOMAIN^^}: bad substitution

Detected Root’s certificate expiration date: 2032 Mar 10
Detected today’s date: 2024 Apr 20
Exporting and generating STS certificate

Status : Success
Using config file : /tmp/vmware-fixsts/certool.cfg
Status : Success

Enter password for administrator@vsphere.local:
Highest tenant credentials index : 1
Exporting tenant 1 to /tmp/vmware-fixsts

./fixsts.sh: line 155: ldapsearch: command not found
Tenant 1 not found

Highest trusted cert chains index: 1
Exporting trustedcertchain 1 to /tmp/vmware-fixsts

./fixsts.sh: line 189: ldapsearch: command not found
Trusted cert chain 1 not found

Applying newly generated STS certificate to SSO domain
ldap_add: No such object (32)
additional info: parent (cn=TrustedCertificateChains,cn=vsphere.local,cn=Tenants,cn=IdentityManager,cn=Services,dc=vsphere,dc=local) not found, ((MDB_NOTFOUND: No matching key/data pair found)(cn=trustedcertificatechains,cn=vsphere.local,cn=tenants,cn=identitymanager,cn=services,dc=vsphere,dc=local))
adding new entry “cn=TenantCredential-1,cn=vsphere.local,cn=Tenants,cn=IdentityManager,cn=Services,dc=vsphere,dc=local”

adding new entry “cn=TrustedCertChain-1,cn=TrustedCertificateChains,cn=vsphere.local,cn=Tenants,cn=IdentityManager,cn=Services,dc=vsphere,dc=local”

Replacement finished - Please restart services on all vCenters and PSCs in your SSO domain
IMPORTANT: In case you’re using HLM (Hybrid Linked Mode) without a gateway, you would need to re-sync the certs from Cloud to On-Prem after following this procedure


阅读 89

收藏
2024-06-02

共1个答案

小能豆

从您提供的日志和错误信息来看,存在多个问题需要解决。这些问题包括:

  1. bash 中的坏替换(bad substitution)错误
    这是由于 ${DOMAIN^^} 语法在当前环境中不被支持。${VAR^^} 语法是用于将变量内容转换为大写的Bash 4.0及以上版本特性。

  2. 找不到 ldapsearch 命令
    您的脚本需要 ldapsearch 命令,但在运行环境中未找到。需要安装这个命令。

解决方案

1. 修正 bad substitution 错误

DOMAIN^^ 是将 DOMAIN 环境变量内容转换为大写的操作。为了兼容性,可以使用 tr 命令替代:

administrator@$(echo ${DOMAIN} | tr '[:lower:]' '[:upper:]')

因此,您需要在脚本中找到第 60 行,并将其替换为:

administrator@$(echo ${DOMAIN} | tr '[:lower:]' '[:upper:]')

2. 安装 ldapsearch 工具

ldapsearch 是 OpenLDAP 软件包的一部分。在大多数 Linux 发行版中,可以通过包管理器安装:

  • Debian/Ubuntu:

    sh sudo apt-get update sudo apt-get install ldap-utils

  • Red Hat/CentOS:

    sh sudo yum install openldap-clients

  • SUSE:

    sh sudo zypper install openldap2-client

3. 检查和修复其他潜在问题

您还需要确保脚本中的其他部分没有类似的问题,特别是与路径和命令相关的部分。

修改脚本示例

假设 fixsts.sh 是您的脚本,以下是修改后的部分脚本示例:

# 在第 60 行附近
# 将以下内容
# administrator@${DOMAIN^^}
# 替换为
administrator@$(echo ${DOMAIN} | tr '[:lower:]' '[:upper:]')

# 确保 ldapsearch 已安装,并正确配置 PATH
command -v ldapsearch >/dev/null 2>&1 || { echo >&2 "ldapsearch command not found. Please install it."; exit 1; }

# 处理 ldapsearch 命令相关部分,确保使用正确的路径和参数
# 示例:确保 ldapsearch 命令存在
if ! command -v ldapsearch &> /dev/null
then
    echo "ldapsearch could not be found"
    exit 1
fi

# 其余脚本部分保持不变

执行并测试脚本

  1. 保存并退出编辑器
  2. 确保脚本具有可执行权限

    sh chmod +x fixsts.sh

  3. 执行脚本

    sh ./fixsts.sh

验证结果

确保脚本在运行时不会再出现 bad substitutionldapsearch: command not found 错误。如果仍然出现其他错误,请根据错误消息进一步排查和解决。

通过这些修改,您的脚本应该能够在 Windows 开机时自动启动并执行预期的操作,同时避免常见的替换和命令未找到的问题。

2024-06-02