![带有 LDAP 的 Linux 集群,自动同时在多台机器上创建主目录](https://linux22.com/image/721894/%E5%B8%A6%E6%9C%89%20LDAP%20%E7%9A%84%20Linux%20%E9%9B%86%E7%BE%A4%EF%BC%8C%E8%87%AA%E5%8A%A8%E5%90%8C%E6%97%B6%E5%9C%A8%E5%A4%9A%E5%8F%B0%E6%9C%BA%E5%99%A8%E4%B8%8A%E5%88%9B%E5%BB%BA%E4%B8%BB%E7%9B%AE%E5%BD%95.png)
我正在设置一个由 (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 时如何执行此操作的问题。