是python的新手。我可以使用以下脚本来切换到交换机并获取所需的数据,但我需要从100多个交换机中提取此信息。为此,我需要添加什么内容?谢谢
from paramiko import client
class ssh:
client = None
def __init__(self, address, username, password):
# Let the user know we're connecting to the server
print("Connecting to switch.")
# Create a new SSH client
self.client = client.SSHClient()
# The following line is required if you want the script to be able to access a server that's not yet in the known_hosts file
self.client.set_missing_host_key_policy(client.AutoAddPolicy())
# Make the connection
self.client.connect(address, username=username, password=password, look_for_keys=False)
def sendCommand(self, command):
if(self.client):
stdin, stdout, stderr = self.client.exec_command(command)
while not stdout.channel.exit_status_ready():
# Print data when available
if stdout.channel.recv_ready():
alldata = stdout.channel.recv(1024)
prevdata = b"1"
while prevdata:
prevdata = stdout.channel.recv(1024)
alldata += prevdata
print(str(alldata, "utf8"))
else:
print("Connection not opened.")
connection = ssh("x.x.x.x", "user", "pwd")
connection.sendCommand("show int status | e not")
答案 0 :(得分:0)
三明治意味着实例?所以你想在多机上运行命令?您可以尝试面料。
@roles("instance-group")
@task
def upload():
"""上传代码到测试服务器"""
local("tar -zc -f /tmp/btbu-spider.tar.gz ../BTBU-Spider")
put("/tmp/btbu-spider.tar.gz", "/tmp/")
local('rm /tmp/btbu-spider.tar.gz')
run("tar -zx -f /tmp/btbu-spider.tar.gz -C ~/test/")
然后您可以定义“ instance-group” ssh ip,可以从本地调用此函数。但是实际上所有这些命令都是在远程实例(不是本地函数)上运行的。
答案 1 :(得分:0)
将有关所有交换机的信息添加到配置文件中,例如:
地址1,用户名1,密码1
地址2,用户名2,密码2
每个开关都可以换行,并且可以使用逗号分隔参数以简化使用。然后,打开文件并逐行读取并解析它们:
with open('switches.conf', 'r') as f:
for line in f: # Read line by line
params = line.split(',') # Split the three arguments by comma
address = params[0]
username = params[1]
password = params[2]
connection = ssh(address, username, password)
connection.sendCommand("show int status | e not")
with open(address, 'w+') as wf: # If you have to write any information about the switches, suggesting this method
wf.write(..information to write..)
必须在循环中完成。您可以仅在该周期中调用两个函数,即初始化SSH连接的函数和获取信息的函数,而这可能是您的主要功能。当然,配置示例只是一个准则,它有很多缺陷,尤其是安全缺陷,因此您可以根据需要进行配置。无论如何,这个想法是,您只需要一个周期就可以做到这一点,并且通过读取配置文件可以使它变得容易得多:)并且您可以将信息保存到以实例地址命名的不同文本文件中。例如,@ Santosh Kumar在评论中建议。 编辑:编辑我的答案,并为连接和发送命令添加了一个示例,因为我没有注意到这是一个类。
答案 2 :(得分:0)
您可以使用parallel-ssh
在多台计算机上运行ssh cmds。通过运行`pip install parallel-ssh
from pssh.clients import ParallelSSHClient
hosts = ['switch1', 'switch2']
client = ParallelSSHClient(hosts, user='my_user', password='my_pass')
output = client.run_command('show int status | e not')
for host, host_output in output.items():
print host, "".join(host_output.stdout)