Skip to main content
 首页 » 编程设计

python之使用 Python 自动化 SSH

2025年05月04日17daizhj

我有这 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 文件配置无密码登录。这样您就不需要在主机列表中输入密码。