前天写了用paramiko多线程SSH登陆华为交换机处理简单的命令,后面看了有很多问题。比如用户名密码及配置命令是写死在主文件中。要改起来比较麻烦,可扩展性不好。今天做了优化,让它适用在配置过SSH登陆的同用户名密码同类交换机做批量配置。(在华为交换机测试过运行正常)
目录结构如下:只需要改动前两个配置文件
[root@10-57-22-238 sshsw]# ll
total 12
-rw-r--r-- 1 root root 79 Mar 14 23:53 cmd.txt
-rw-r--r-- 1 root root 274 Mar 14 23:32 conf.py
-rw-r--r-- 1 root root 933 Mar 14 23:51 ssh_sw_cmd.py
cmd.txt用来存放要配置到交换机的命令,内容如下(以下内容为配置NTP)。
sys
ntp unicast-peer 192.168.6.100 version 4 source-interface LoopBack0
commit
conf.py 保存交换机的管理IP,及登陆交换机的用户名密码
#-*- coding: utf-8 -*-
#!/usr/bin/python
#要执行操作的交换机管理
swip={
'testare4' : '172.16.200.6',
'testare1' : '10.57.1.22',
};
#交换机SSH用户名密码
username = "wsf535" #用户名
passwd = "****" #密码
threads = [10] #多线程
ss_sw_cmd.py为主运行文件
#-*- coding: utf-8 -*-
#!/usr/bin/python
import paramiko
import threading
import time
import os
from conf import *
#拿到cmd.txt文件中的命令
with open('./cmd.txt', 'r') as f:
cmd_line= f.readlines()
cmd=[]
for c in cmd_line:
cmd.append(c)
#定义连接与操作
def ssh2(ip,username,passwd,cmd):
try:
ssh = paramiko.SSHClient()
ssh.set_missing_host_key_policy(paramiko.AutoAddPolicy())
ssh.connect(ip,22,username,passwd,timeout=5)
ssh_shell = ssh.invoke_shell()
for m in cmd:
res = ssh_shell.sendall(m)
time.sleep(float(1))
print ssh_shell.recv(1024)
ssh.close()
except :
print '%s\tError\n'%(ip)
if __name__=='__main__':
print "Begin......"
for key in swip:
ip = swip[key]
a=threading.Thread(target=ssh2,args=(ip,username,passwd,cmd))
a.start()
网友评论