我正在设置一个由 (20+) 台机器组成的计算机集群,我有一个工作正常的中央 ldap 服务器,用于对用户进行身份验证并保持集群中的 GID 和 UID 同步。一台机器充当头节点,暴露在更广泛的网络中,用户通过 ssh 进入该节点,然后可以 ssh 进入其他机器。这很好用。用户也可以正常 ssh 进入其他机器。
当用户第一次登录到头节点时,PAM 会为他们创建一个主目录。
当这种情况发生时,我需要同时在所有其他机器上创建一个主目录。
我正在考虑可能的解决方案:
- 有一个脚本可以执行此操作,当用户首次登录到头节点时触发。我不确定最优雅的方法是执行此操作,除了包含 20 多个 ssh 命令的 .sh 脚本
- 让 cron 任务频繁地执行上述操作
- 配置某种 PAM 巫术来实现这一点
- 有一个 cron 作业为 LDAP 目录中的每个用户创建一个主目录(不想这样做,只想要已登录到头节点的用户)
- 其他(欢迎提出建议)
目前,用户必须通过 ssh 进入所有节点来创建他们的主目录。
在这些 dockerfile 中可以找到我们正在运行的内容以及我如何设置的粗略类比: https://github.com/dooglz/slurm_docker/blob/master/slurm/ldap_host.dockerfile https://github.com/dooglz/slurm_docker/blob/master/slurm/slurm_node.dockerfile
该集群实际上 100% 在 docker 中运行,但在 20 多台裸机 Ubuntu 18 服务器上运行。这样我就可以轻松更改配置。
为什么:我们正在运行 SLURM 作业调度程序,它在集群上运行批处理作业,作为用户 UID,如果主目录不存在(即作业在用户尚未通过 ssh 进入的节点上运行),我们会收到错误。用户可以更改默认作业目录,但我不想这样做
欢迎提出建议和评论。谢谢
附言
使用 NFS 安装 /home 是可能的,但是由于用例的性质,我们需要 /home 从快速本地磁盘进行写入和读取。
*编辑 我现在有了一个解决方案,但它只适用于我的工作流程。使用 SLURM prolog 命令(该命令以 root 身份在即将运行作业的节点上运行),我将用户主目录设为 mkdir。这对我来说很有效,但并没有解决我在其他情况下或使用 PAM 时如何执行此操作的问题。
答案1
我现在有了一个解决方案,但它只适用于我的工作流程。使用 SLURM prolog 命令(该命令以 root 身份在即将运行作业的节点上运行),我将用户主目录设为 mkdir。这对我来说很有效,但并没有解决我在其他情况下或使用 PAM 时如何执行此操作的问题。