gpt4 book ai didi

linux - 使用 sudo 访问附加到文件

转载 作者:太空宇宙 更新时间:2023-11-04 10:21:17 25 4
gpt4 key购买 nike

我正在尝试将行附加到 root 拥有的现有文件中,我必须使用大约 100 台服务器来完成此任务。因此,我创建了包含所有 IP 的 servers.txtntp.txt 文件,其中包含我需要附加的行。我正在执行以下脚本,但没有实现我想要的。有人可以建议需要更正的地方吗?

!/bin/bash
servers=`cat servers.txt`;
for i in $servers;
do
cat ntp.txt | ssh root@${i} sudo sh -c "cat >>ntp.conf""
done

最佳答案

这里有一些问题;不确定我是否找到了所有这些。

  1. shebang 行缺少重要且关键的 #
  2. 没有必要将服务器名称读入变量,除了浪费内存之外,您还面临许多潜在问题;见https://mywiki.wooledge.org/DontReadLinesWithFor
  3. Unless you specifically require the shell to do whitespace tokenization and wildcard expansion on a value,将它放在双引号中(甚至是单引号,但这会抑制您仍然想要的变量扩展)。
  4. 如果您以 root 身份登录,则无需显式 sudo
  5. ssh 为您运行一个 shell;无需显式 sh -c 您的命令。
  6. 另一方面,如果可以的话,您希望避免运行 root shell。一种无需生成 shell 即可重定向到文件的常见方法是使用 tee -a(只需删除 -a 即可覆盖而不是追加)。将文件打印到标准输出也是一种不良影响(有些人会说 tee 的主要影响而不是副作用,但我们只是不去那里)所以你经常重定向到 /dev/null 以避免文本也溢出到您的屏幕上。
  7. 你可能想避免 useless use of cat如果只是为了避免有人向您指出它是无用的。
#!/bin/bash
while read -r server; do
do
ssh you@"$server" sudo tee -a /etc/ntp.conf <ntp.txt >/dev/null
done <servers.txt

我将代码更改为以 you 身份登录,但这当然是您需要调整以适应您的环境的东西。 (如果您以自己的身份登录,您通常只是 ssh server 而无需明确指定用户名。)

根据您的评论,我还添加了目标文件的完整路径 /etc/ntp.conf

一种更规范的服务器配置方法是使用 CFengine2 之类的东西来管理配置。

关于linux - 使用 sudo 访问附加到文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43767945/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com