首页 > 解决方案 > 如何创建一个 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 个单独的文件中获取主机名和命令

标签: pythonscript

解决方案


原来我在这里找到了答案(我想要的完美脚本):

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这种方式运行命令 :)


推荐阅读