排查与 Active Directory 的多用户集成问题 - Amazon ParallelCluster
Amazon Web Services 文档中描述的 Amazon Web Services 服务或功能可能因区域而异。要查看适用于中国区域的差异,请参阅 中国的 Amazon Web Services 服务入门 (PDF)

本文属于机器翻译版本。若本译文内容与英语原文存在差异,则一律以英文原文为准。

排查与 Active Directory 的多用户集成问题

本节内容涉及与 Active Directory 集成的集群。

如果 Active Directory 集成功能未按预期运行,则 SSSD 日志可以提供有用的诊断信息。这些日志位于集群节点上的 /var/log/sssd 中。默认情况下,它们还存储在集群的 Amazon CloudWatch 日志组中。

特定于 Active Directory 的问题排查

本节与特定于 Active Directory 类型的问题排查有关。

Simple AD

  • DomainReadOnlyUser 值必须与用户的 Simple AD 目录基础搜索相匹配:

    cn=ReadOnlyUser,cn=Users,dc=corp,dc=example,dc=com

    注意 Userscn

  • 默认管理员用户是 Administrator

  • Ldapsearch 要求在用户名前面加上 NetBIOS 名称。

    Ldapsearch 语法必须如下所示:

    $ ldapsearch -x -D "corp\\Administrator" -w "Password" -H ldap://192.0.2.103 \ -b "cn=Users,dc=corp,dc=example,dc=com"

Amazon Managed Microsoft AD

  • DomainReadOnlyUser值必须与基于 Amazon Managed Microsoft AD 目录的用户搜索相匹配:

    cn=ReadOnlyUser,ou=Users,ou=CORP,dc=corp,dc=example,dc=com

  • 默认管理员用户是 Admin

  • Ldapsearch 语法必须如下所示:

    $ ldapsearch -x -D "Admin" -w "Password" -H ldap://192.0.2.103 \ -b "ou=Users,ou=CORP,dc=corp,dc=example,dc=com"

启用调试模式

SSSD 提供的调试日志可用于排查问题。要启用调试模式,您必须在对集群配置进行以下更改后更新集群:

DirectoryService: AdditionalSssdConfigs: debug_level: "0x1ff"

如何从 LDAPS 迁移到 LDAP

不鼓励从 LDAPS(采用 TLS/SSL 的 LDAP)迁移到 LDAP,因为 LDAP 本身不提供任何加密。但可以使用它来进行测试和问题排查。

您可以使用先前的配置定义更新集群,从而将集群还原到以前的配置。

要从 LDAPS 迁移到 LDAP,必须在集群配置中进行以下更改,然后更新集群:

DirectoryService: LdapTlsReqCert: never AdditionalSssdConfigs: ldap_auth_disable_tls_never_use_in_production: True

如何禁用 LDAPS 服务器证书验证

出于测试或问题排查目的,在头节点上暂时禁用 LDAPS 服务器证书验证可能很有用。

您可以使用先前的配置定义更新集群,从而将集群还原到以前的配置。

要禁用 LDAPS 服务器证书验证,必须在集群配置中进行以下更改,然后更新集群:

DirectoryService: LdapTlsReqCert: never

如何使用 SSH 密钥而不是密码进行登录

SSH 密钥是在您首次使用密码登录后在 /home/$user/.ssh/id_rsa 中创建的。要使用 SSH 密钥登录,必须先使用密码登录,在本地复制 SSH 密钥,然后像往常一样用它进行无密码的 SSH 登录:

$ ssh -i $LOCAL_PATH_TO_SSH_KEY $username@$head_node_ip

如何重置用户密码和过期的密码

如果用户无法访问集群,其 Amazon Managed Microsoft AD 密码可能已过期

要重置密码,请使用对目录具有写入权限的用户和角色运行以下命令:

$ aws ds reset-user-password \ --directory-id "d-abcdef01234567890" \ --user-name "USER_NAME" \ --new-password "NEW_PASSWORD" \ --region "region-id"

如果您重置 DirectoryService/DomainReadOnlyUser 的密码:

  1. 确保使用新密码更新 DirectoryService/PasswordSecretArn 密钥。

  2. 更新集群以获取新密钥值:

    1. 使用 pcluster update-compute-fleet 命令停止计算实例集。

    2. 在集群头节点中运行以下命令。

      $ sudo /opt/parallelcluster/scripts/directory_service/update_directory_service_password.sh

密码重置和集群更新后,用户的集群访问权限应会恢复。

有关更多信息,请参阅 Amazon Directory Service Administration Guide 中的 Reset a user password

如何验证加入的域

必须从加入到域的实例(而非头节点)中运行以下命令。

$ realm list corp.example.com \ type: kerberos \ realm-name: CORP.EXAMPLE.COM \ domain-name: corp.example.com \ configured: kerberos-member \ server-software: active-directory \ client-software: sssd \ required-package: oddjob \ required-package: oddjob-mkhomedir \ required-package: sssd \ required-package: adcli \ required-package: samba-common-tools \ login-formats: %U \ login-policy: allow-realm-logins

如何排查证书问题

当 LDAPS 通信不起作用时,可能是由于 TLS 通信中的错误造成的,这反过来可能是由于证书问题造成的。

有关证书的说明:
  • 集群配置 LdapTlsCaCert 中指定的证书必须是一个 PEM 证书捆绑包,其中包含为域控制器颁发证书的整个证书颁发机构 (CA) 链的证书。

  • PEM 证书捆绑包是由 PEM 证书串联而成的文件。

  • PEM 格式的证书(通常用于 Linux)等同于 base64 DER 格式的证书(通常由 Windows 导出)。

  • 如果域控制器的证书由从属 CA 颁发,则证书捆绑包必须同时包含从属 CA 和根 CA 的证书。

问题排查验证步骤:

以下验证步骤假定从集群头节点内运行命令,并且可以在 SERVER:PORT 访问域控制器。

要排查与证书有关的问题,请按照以下验证步骤操作:

验证步骤:
  1. 检查与 Active Directory 域控制器的连接:

    验证是否可以连接到域控制器。如果此步骤成功,则与域控制器的 SSL 连接成功并验证了证书。您的问题与证书无关。

    如果此步骤失败,请继续进行下一步验证。

    $ openssl s_client -connect SERVER:PORT -CAfile PATH_TO_CA_BUNDLE_CERTIFICATE
  2. 检查证书验证:

    验证本地 CA 证书捆绑包是否可以验证域控制器提供的证书。如果此步骤成功,则您的问题与证书无关,而是与其他网络问题有关。

    如果此步骤失败,请继续进行下一步验证。

    $ openssl verify -verbose -CAfile PATH_TO_CA_BUNDLE_CERTIFICATE PATH_TO_A_SERVER_CERTIFICATE
  3. 检查 Active Directory 域控制器提供的证书:

    验证域控制器提供的证书的内容是否符合预期。如果此步骤成功,则用于验证控制器的 CA 证书可能有问题,请转到下一个问题排查步骤。

    如果此步骤失败,则必须更正为域控制器颁发的证书并重新执行问题排查步骤。

    $ openssl s_client -connect SERVER:PORT -showcerts
  4. 检查证书的内容:

    验证域控制器提供的证书的内容是否符合预期。如果此步骤成功,则用于验证控制器的 CA 证书可能有问题,请转到下一个问题排查步骤。

    如果此步骤失败,则必须更正为域控制器颁发的证书并重新运行问题排查步骤。

    $ openssl s_client -connect SERVER:PORT -showcerts
  5. 查看本地 CA 证书捆绑包的内容:

    验证用于验证域控制器证书的本地 CA 证书捆绑包的内容是否符合预期。如果此步骤成功,则域控制器提供的证书可能有问题。

    如果此步骤失败,则必须更正为域控制器颁发的 CA 证书捆绑包并重新运行问题排查步骤。

    $ openssl x509 -in PATH_TO_A_CERTIFICATE -text

如何验证与 Active Directory 的集成是否正常工作

如果以下两项检查成功,则表示与 Active Directory 的集成工作正常。

检查:

  1. 您可以发现目录中定义的用户:

    从集群头节点中以 ec2-user 身份运行以下命令:

    $ getent passwd $ANY_AD_USER
  2. 您可以通过提供用户密码 SSH 登录到头节点:

    $ ssh $ANY_AD_USER@$HEAD_NODE_IP

如果第一项检查失败,预计第二项检查也会失败。

其他问题排查检查:

如何排查计算节点登录问题

本节内容涉及登录到与 Active Directory 集成的集群中的计算节点。

使用 Amazon ParallelCluster时,集群计算节点的密码登录在设计上是禁用的。

所有用户都必须使用自己的 SSH 密钥登录到计算节点。

如果在集群配置中启用了 GenerateSshKeysForUsers,则用户可以在首次身份验证(例如登录)后在头节点中检索到其 SSH 密钥。

当用户首次在头节点上进行身份验证时,他们可以检索到作为目录用户自动为他们生成的 SSH 密钥。还会创建该用户的主目录。当 sudo-user 第一次切换到头节点中的用户时,也可能发生这种情况。

如果用户未登录到头节点,则不会生成 SSH 密钥,用户将无法登录到计算节点。

多用户环境中 SimCenter StarCCM+ 作业的已知问题

本节内容与在 Siemens 的 Simcenter StarCCM+ 计算流体动力学软件提供的多用户环境中启动的作业有关。

如果您运行配置为使用嵌入式 IntelMPI 的 StarCCM+ v16 作业,则默认使用 SSH 引导 MPI 进程。

由于已知 Slurm导致用户名解析错误的错误,作业可能会失败并出现错误,例如error setting up the bootstrap proxies。此错误仅影响 Amazon ParallelCluster 版本 3.1.1 和 3.1.2。

要防止这种情况发生,请强制 IntelMPI 使用 Slurm 作为 MPI 引导方法。按照 IntelMPI 官方文档中所述,将环境变量 I_MPI_HYDRA_BOOTSTRAP=slurm 导出到启动 StarCCM+ 的作业脚本中。

用户名解析的已知问题

本节内容与在作业中检索用户名有关。

由于已知的 Slurm 错误,如果您运行作业时不使用 srun,则在作业进程中检索到的用户名可能是 nobody。此错误仅影响 Amazon ParallelCluster 版本 3.1.1 和 3.1.2。

例如,如果您以目录用户身份运行命令 sbatch --wrap 'srun id',则会返回正确的用户名。但如果您以目录用户身份运行 sbatch --wrap 'id',则可能会返回 nobody 作为用户名。

您可以使用以下解决方法。

  1. 在可能的情况下使用 'srun' 而不是 'sbatch' 来启动作业。

  2. 通过按如下方式设置集群AdditionalSssdConfigs中的配置来启用 SSSD 枚举。

    AdditionalSssdConfigs: enumerate: true

如何解决主目录创建问题

本节内容与主目录创建问题有关。

如果您看到类似以下示例所示的错误,则说明您首次登录到头节点时未为您创建主目录,或您在头节点中首次从 sudoer 切换到 Active Directory 用户时未为您创建主目录。

$ ssh AD_USER@$HEAD_NODE_IP /opt/parallelcluster/scripts/generate_ssh_key.sh failed: exit code 1 __| __|_ ) _| ( / Amazon Linux 2 AMI ___|\___|___| https://aws.amazon.com/amazon-linux-2/ Could not chdir to home directory /home/PclusterUser85: No such file or directory

主目录创建失败可能是由集群头节点中安装的 oddjoboddjob-mkhomedir 程序包造成的。

如果没有主目录和 SSH 密钥,用户就无法向集群节点提交作业或进行 SSH 登录。

如果您的系统中需要 oddjob 程序包,请验证 oddjobd 服务是否正在运行,然后刷新 PAM 配置文件以确保已创建主目录。为此,请在头节点中运行以下示例所示的命令。

sudo systemctl start oddjobd sudo authconfig --enablemkhomedir --updateall

如果您的系统中不需要 oddjob 程序包,请将其卸载,然后刷新 PAM 配置文件以确保已创建主目录。为此,请在头节点中运行以下示例所示的命令。

sudo yum remove -y oddjob oddjob-mkhomedir sudo authconfig --enablemkhomedir --updateall