对python连接华为交换机批量配置优化

2018-03-15  本文已影响445人  wsf535

前天写了用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() 
上一篇下一篇

猜你喜欢

热点阅读