如何同时更改多个 Linux 服务器的 /etc/fstab

如何同时更改多个 Linux 服务器的 /etc/fstab

我们有很多 Linux 服务器,它们会使用 NFS 或 SMB 安装一些 Linux 文件服务器/etc/fstab

但手动更改每个服务器/etc/fstab非常繁琐。

有没有办法可以同时编辑多个 Linux 服务器/etc/fstab

答案1

puppet从长远来看,配置管理工具(例如、、chef)就是为完成这类任务而ansible设计的。

对于短期解决方案,我会使用类似func或的方法fabric来推送fstab文件。我将介绍一个使用示例,fabric因为这是我最熟悉的。

安装取决于您的发行版。以下方法之一可能有效:

$ sudo pip install fabric
$ sudo easy_install fabric
$ sudo apt-get install fabric

然后,您还需要分发 ssh 密钥。很简单:

$ ssh-keygen
$ ssh-copy-id host2
$ ssh-copy-id host3

现在,您需要创建一个fab文件(基本上是一个Python脚本)。例如,copy_fstab.fab看起来像这样:

from fabric.operations import put
from fabric.operations import sudo

def copy_fstab():
    # Copy local fstab over
    put('/etc/fstab', '/etc/fstab', use_sudo=True)

    # Run mount -a
    sudo('mount -a')

最后,运行 fab 文件:

$ fab -H host2,host3 copy_fstab

希望这可以帮助!

答案2

使用大规模部署工具(如automateit、salt、puppet、ansible等),您可以运行脚本(在puppet中使用exec)或如下所示的cronjob来使用mount运行大规模部署的fstab:

mount -a --fstab pathtofile

我以前的回答(如果您的挂载太旧而无法使用 --fstab / -T):在这种大规模部署工具中,您可以进行一些可怕的黑客攻击来模拟 /etc/fstab.d 行为(因为 /etc/fstab.d 尚不受支持,并且这些目录使部署工具非常有用)。

将 fstab 移至 /etc/fstab.d/01main

在文件 /etc/fstab.d/02nfsstuff 中部署 fs​​tab 行

合并它们(这里数字顺序很重要):

cat /etc/fstab.d/* > /etc/fstab

在 /etc/cron.d/nfsstuff 中创建一个可怕的 hackjob cronjob

0 * * * * root cat /etc/fstab.d/* > /etc/fstab ; mount -a

我希望你能找到一个合适的解决方案,但在此之前,也许这是有用的。

答案3

我同意 Peter 的观点,使用部署工具是最完美的解决方案。但是我不认为从 cron 中安装东西是个好主意!

如果部署工具太过复杂,我会使用后期的 init/systemd 脚本(它可能会从中央存储库获取定义)并挂载文件系统。

答案4

假设我在每台服务器上都有一个可通过带有公钥认证的 SSH 访问的管理员帐户,我只需在 bash 循环中使用此 SSH 帐户远程运行 sed 或其他文本编辑工具。

相关内容