本文属于机器翻译版本。若本译文内容与英语原文存在差异,则一律以英文原文为准。
排查与 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
注意
Users
的cn
。 -
默认管理员用户是
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 -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 的密码:
-
确保使用新密码更新 DirectoryService/PasswordSecretArn 密钥。
-
更新集群以获取新密钥值:
-
使用
pcluster update-compute-fleet
命令停止计算实例集。 -
在集群头节点中运行以下命令。
$
sudo /opt/parallelcluster/scripts/directory_service/update_directory_service_password.sh
-
密码重置和集群更新后,用户的集群访问权限应会恢复。
有关更多信息,请参阅 AWS 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
要排查与证书有关的问题,请按照以下验证步骤操作:
验证步骤:
-
检查与 Active Directory 域控制器的连接:
验证是否可以连接到域控制器。如果此步骤成功,则与域控制器的 SSL 连接成功并验证了证书。您的问题与证书无关。
如果此步骤失败,请继续进行下一步验证。
$
openssl s_client -connect
SERVER
:PORT
-CAfilePATH_TO_CA_BUNDLE_CERTIFICATE
-
检查证书验证:
验证本地 CA 证书捆绑包是否可以验证域控制器提供的证书。如果此步骤成功,则您的问题与证书无关,而是与其他网络问题有关。
如果此步骤失败,请继续进行下一步验证。
$
openssl verify -verbose -CAfile
PATH_TO_CA_BUNDLE_CERTIFICATE
PATH_TO_A_SERVER_CERTIFICATE
-
检查 Active Directory 域控制器提供的证书:
验证域控制器提供的证书的内容是否符合预期。如果此步骤成功,则用于验证控制器的 CA 证书可能有问题,请转到下一个问题排查步骤。
如果此步骤失败,则必须更正为域控制器颁发的证书并重新执行问题排查步骤。
$
openssl s_client -connect
SERVER
:PORT
-showcerts -
检查证书的内容:
验证域控制器提供的证书的内容是否符合预期。如果此步骤成功,则用于验证控制器的 CA 证书可能有问题,请转到下一个问题排查步骤。
如果此步骤失败,则必须更正为域控制器颁发的证书并重新运行问题排查步骤。
$
openssl s_client -connect
SERVER
:PORT
-showcerts -
查看本地 CA 证书捆绑包的内容:
验证用于验证域控制器证书的本地 CA 证书捆绑包的内容是否符合预期。如果此步骤成功,则域控制器提供的证书可能有问题。
如果此步骤失败,则必须更正为域控制器颁发的 CA 证书捆绑包并重新运行问题排查步骤。
$
openssl x509 -in
PATH_TO_A_CERTIFICATE
-text
如何验证与 Active Directory 的集成是否正常工作
如果以下两项检查成功,则表示与 Active Directory 的集成工作正常。
检查:
-
您可以发现目录中定义的用户:
从集群头节点中以
ec2-user
身份运行以下命令:$
getent passwd
$ANY_AD_USER
-
您可以通过提供用户密码 SSH 登录到头节点:
$
ssh
$ANY_AD_USER@$HEAD_NODE_IP
如果第一项检查失败,预计第二项检查也会失败。
其他问题排查检查:
-
验证目录中是否存在该用户。
-
启用调试日志记录。
-
考虑通过从 LDAPS 迁移到 LDAP暂时禁用加密,以排除 LDAPS 问题。
如何排查计算节点登录问题
本节内容涉及登录到与 Active Directory 集成的集群中的计算节点。
使用 AWS 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
”的错误。此错误仅影响 AWS ParallelCluster 版本 3.1.1 和 3.1.2。
为了防止这种情况发生,请强制 IntelMPI 使用 Slurm 作为 MPI 引导方法。按照 IntelMPI 官方文档I_MPI_HYDRA_BOOTSTRAP=slurm
导出到启动 StarCCM+ 的作业脚本中。
用户名解析的已知问题
本节内容与在作业中检索用户名有关。
由于已知的 Slurm 错误srun
,则在作业进程中检索到的用户名可能是 nobody
。此错误仅影响 AWS ParallelCluster 版本 3.1.1 和 3.1.2。
例如,如果您以目录用户身份运行命令 sbatch --wrap 'srun id'
,则会返回正确的用户名。但如果您以目录用户身份运行 sbatch --wrap 'id'
,则可能会返回 nobody
作为用户名。
您可以使用以下解决方法。
-
在可能的情况下使用
'srun'
而不是'sbatch'
来启动作业。 -
通过按以下方式在集群配置中设置 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
主目录创建失败可能是由集群头节点中安装的 oddjob
和 oddjob-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