如何为多个 linux 设备上的 ssh 和 运行 命令创建 python 脚本

how to create a python script to ssh and run commands on multiple linux devices

我一直在努力寻找一个解释过的 python 脚本来使用 paramiko 通过 ssh ssh 到多个 linux 设备。我找到了一些调整它们并实际工作,但我仍然不明白它是如何工作的。

有人可以用最吸引人的方式解释一个 python 脚本如何通过 ssh 连接到多个 linux 设备和 运行 命令吗?就像你会向一个 6 岁的孩子解释的那样。我的意思是我看到了一些脚本,它们无缘无故地有些复杂。我只想要一个 python 脚本,它导入一个主机名文本和另一个命令文本,并且 运行 向所有 linux 设备和 returns 输出相同的命令。如果有人可以解释这样的脚本是如何工作的,我将不胜感激。

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 文件 和 运行s 脚本顺序。此外,它可以 运行 sudo 这样命令 :)