python - 如何创建一个 python 脚本来 ssh 并在多个 linux 设备上运行命令
问题描述
我一直在寻找一个解释的 python 脚本,通过 ssh 使用 paramiko ssh 到多个 linux 设备。我发现对它们进行了一些调整并且确实有效,但我仍然无法理解它是如何工作的。
有人可以用最吸引人的方式解释一个 python 脚本如何通过 ssh 连接到多个 linux 设备并运行命令吗?就像你会向一个 6 岁的孩子解释的那样。我的意思是我看到了一些脚本,它们无缘无故地有些复杂。我只想要一个 python 脚本,它可以导入一个主机名 txt 和另一个 txt 命令,并对所有 linux 设备运行相同的命令并返回输出。如果有人能解释这样的脚本是如何工作的,我将不胜感激。
ip = input("Please enter the hostname ")
user = ""
password = ""
print ("creating ssh")
ssh_client = paramiko.SSHClient()
ssh_client.set_missing_host_key_policy(paramiko.AutoAddPolicy())
print("please wait")
ssh_client.connect(hostname=ip, username=user, password=password)
cmd= "uname -r;pwd"
print("please wait")
sdtin,stdout,stderr = ssh_client.exec_command(cmd)
print("success")
stdout = stdout.readlines()
stdout = "".join(stdout)
print (stdout)
我想要这个,但对于多个设备并从 2 个单独的文件中获取主机名和命令
解决方案
原来我在这里找到了答案(我想要的完美脚本):
import paramiko
import time
p = paramiko.SSHClient()
cred = open("hostnames.csv","r")
for i in cred.readlines():
line=i.strip()
ls =line.split(",")
print(ls[0])
p.set_missing_host_key_policy(paramiko.AutoAddPolicy())
p.connect("%s"%ls[0],port =22, username = "%s"%ls[1], password="%s"%ls[2])
stdin, stdout, stderr = p.exec_command('sudo pwd' , get_pty=True)
stdin.write("%s\n"%ls[2])
stdin.flush()
opt = stdout.readlines()
opt ="".join(opt)
print(opt)
cred.close()
因此,它基本上读取格式为:主机名、用户名、密码的 csv 文件并按顺序运行脚本。此外,它可以通过sudo
这种方式运行命令 :)
推荐阅读
- algorithm - 算法具有相同名称的新变量
- reactjs - 如何仅为特定的 div(组件)呈现 useState 值?
- azure - 字符串值中的 Azure 数据工厂转义字符
- javascript - chrome devtools调试反应,点击“刷新”导致调试卡住
- excel - 从yahoo Finance 的html 表格中提取数字| Excel VBA 网页抓取
- ansible - 当任何一项任务发生更改时,包含循环的任务中的 changed_when 应该为真
- javascript - 使用另一个字符串数组过滤数组的内容
- inno-setup - Inno Setup - 在消息框打开和关闭时为消息框设置动画
- django - 为什么我的 Python Django url 不起作用?
- c++ - 使用函数 decimal 仅将输入的小数返回为 double C++