排除与活动目录的多用户集成故障 - AWS ParallelCluster

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

排除与活动目录的多用户集成故障

本节与与 Active Directory 集成的集群有关。

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

Active Direc

本节与特定于 Active Directory 类型的故障排除有关。

Simple AD

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

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

    注意cn事项Users

  • 默认管理员用户是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"

AWS Managed Microsoft AD

  • DomainReadOnlyUser值必须与用户的AWS 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:

$ ssh -i $LOCAL_PATH_TO_SSH_KEY $username@$head_node_ip

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

如果用户失去对集群的访问权限,则其AWS 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

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

有关更多信息,请参阅《AWS Directory Service管理指南》中的重置用户密码

如何验证加入的域名

以下命令必须从加入域的实例上运行,而不是从头节点运行。

$ 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 域控制器的连接:

    验证是否可以连接到 Domain 控制器。如果此步骤成功,则与域控制器的 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 集成的集群中的计算节点有关。

使用AWS ParallelCluster时,按设计禁用密码登录到群集计算节点。

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

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

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

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

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

本节与西门子的 Simcenter StarCCM+ 计算流体动力学软件在多用户环境中启动的任务有关。

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

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

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

用户名解析的已知问题

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

由于 Slurm 中的一个已知错误,在任务进程中检索到的用户名可能是nobody你在不运行任务时使用的srun。此错误仅影响AWS 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