我有这 30 台虚拟机,现在我正在手动执行所有操作,这对我来说是一种麻烦。我现在正在尝试编写一个脚本,这样我就可以自动连接到它们并完成我想要的任务。我制作了我需要做的事情的流程图。任何人都可以给我一些提示,说明我将如何以编程方式完成此任务。我附上流程图。
提前致谢。
请右键单击图像并单击查看图像以查看流程图。
请您参考如下方法:
读取文本文件并获取数据很简单:
with open('host.txt', 'r') as inf:
lines = inf.readlines()
hostlist = [ln.split() for ln in lines]
现在 hoSTList 应该是列表的列表;
[['192.168.0.23', 'root', 'secret'], ['192.168.0.24', 'root', 'secret2'] ...
但是您的列表不应包含主机名以外的内容。 IP 地址可以从您必须配置的 DNS 中获取,如果配置正确,ssh 可以不用密码登录。
将所有虚拟主机的密码放在纯文本文件中存在安全问题。如果您想走那条路,请确保限制对该文件的访问!
您可以使用subprocess 来执行命令。我建议使用 rsync 将所需的文件推送到虚拟机。这最大限度地减少了网络流量。您可以直接从一个文件系统部署到另一个文件系统,而无需滚动 tarball。它可以像这样简单
status = subprocess.check_output(['rsync', '-av', localdir, remotedir])
localdir 是存储相关虚拟机文件的目录(它应该以 '/' 结尾),'remotedir' 是 hostname::directory 在数据应该登陆的虚拟机上(这应该不以“/”结尾)。
要远程执行命令,ssh 是必经之路。在每个远程主机上使用 ssh 的 authorized_keys 文件配置无密码登录。这样您就不需要在主机列表中输入密码。
