为远程机器创建符号链接

为远程机器创建符号链接

我有 2 个 Linux 服务器 A 和 B,它们共享公共目录。我必须为每个具有一个公共文件的服务器创建 /etc/hosts 文件的符号链接。每当我更新由两个服务器共享的公共文件时,它们都能够知道文件中的更改并自动更新 /etc/hosts。是否可以使用符号链接或任何其他选项?

答案1

与其使用指向(远程)主机文件的符号链接,不如使用远程主机的信息更新本地副本。这样,如果发生网络中断或“主”主机宕机,您仍然有本地 /etc/hosts 文件。

您应该在每个本地 /etc/hosts 文件中设置一个“结构”来分隔本地和全局信息。

本地 /etc/hosts 文件示例:

# local informations:

127.0.0.1 localhost otherhandylocalalias
# specificly needed aliases for this host:
1.2.3.4 some_specific.host.domain

# before:local after:global informations (copied from: ...........)

........................
........................

并且您可以将文件的其余部分(“# before: local after:global ....”行之后的所有内容)替换为“全局”信息,该信息要么取自专用于托管“经过验证的”全局信息的远程文件(例如:remotehost:/etc/hosts_global_informations.master)文件,要么仅从主 /etc/hosts 文件的“全局部分”中检索(例如:remotehost:/etc/hosts)。

检索这些信息的具体方法是多种多样的,取决于您可以获得哪些信息。

一个例子:在你的 shell 中,你可以手动执行如下操作:(假设所有的 /etc/hosts 文件都包含相同的分隔符,即与“zesep”正则表达式匹配的行:

export zesep='# before:local after:global .*'
   #this allows you to complete the line in each /etc/hosts with non-global informations!

awk "/${zesep}/,0 { continue } 1 { print }" </etc/hosts >/etc/newlocalhosts 
ssh user@remotehost 'cat /etc/hosts' | awk "/${zesep}/,0 { print } " >> /etc/newlocalhosts

然后将 /etc/hosts 替换为 /etc/newlocalhosts,前提是您确定新的主机名正确(注意:例如,检查 ssh 是否正常,因为如果网络出现故障,ssh 可能会失败!)。如果正确,您可以:

cat /etc/newlocalhosts > /etc/hosts  #this will keep the settings (mode, etc) of /etc/hosts but replace its content. 

答案2

使用传统的符号链接,这是不可能的。您正在寻找某种配置管理软件,如 Puppet 或 cfengine,以便在更新 /etc/hosts 时将其推送出去。

相关内容