![如果我们在局域网上有一组 Linux 计算机,如何编写 shell 脚本来关闭所有计算机](https://linux22.com/image/1411384/%E5%A6%82%E6%9E%9C%E6%88%91%E4%BB%AC%E5%9C%A8%E5%B1%80%E5%9F%9F%E7%BD%91%E4%B8%8A%E6%9C%89%E4%B8%80%E7%BB%84%20Linux%20%E8%AE%A1%E7%AE%97%E6%9C%BA%EF%BC%8C%E5%A6%82%E4%BD%95%E7%BC%96%E5%86%99%20shell%20%E8%84%9A%E6%9C%AC%E6%9D%A5%E5%85%B3%E9%97%AD%E6%89%80%E6%9C%89%E8%AE%A1%E7%AE%97%E6%9C%BA.png)
我有实验室,其中的 Linux 计算机集合连接在 LAN 中。我想知道如何编写 shell 脚本以便在运行该 shell 脚本时关闭所有 PC。
答案1
inventory.txt
将主机名或 IP 地址放入如下命名的文件中:
computer1
computer2
192.168.1.1
使用此脚本:
while read host; do
ssh root@${host} shutdown -h now
done < inventory.txt
答案2
抱歉,我不允许添加评论(声誉不够高?),所以很遗憾必须将其作为答案发布
我也很好奇为什么答案也被否决了。@Cristian 的回答有很多优点,我同意如果 OP 没有 SSH 守护程序,他要么说他需要一个解决方法,要么他会意识到他可能需要安装它。考虑到大多数此类问题的答案都会使用 SSH 守护程序,我认为这是个好答案。
话虽如此,我也同意您应该使用 root 来执行此操作并使用 ssh 密钥身份验证。这是最好和最安全的答案。当然,您不会在 ssh 脚本中使用密码 - 更难做到(可能需要使用 expect)并且不太安全。
我不知道如何使用非 root 用户来关闭电源/重启。使用您发送的链接,您意识到 sudo 用户配置为没有密码,然后关闭机器。这意味着任何知道用户名的用户都可以 sudo 到该用户并关闭电源。这是你真正想要的吗?
再次抱歉,这是作为单独的答案发布的 - 我想将其作为对@Cristian 答案的评论添加,因为我会投票支持他的答案