多台设备批量执行ssh命令,目前是串行,后期会加入多线程实现并行,直接上源码

注意不能执行top等动态命令

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
#!/usr/bin/env python
# -*- coding:utf-8 -*-
 
__author__   =  'babyshen'
__version__  =  '1.0.0'
 
import  paramiko
from  collections  import  OrderedDict
 
class  SSh( object ):
     def  __init__( self ,port,username,password):
         self .port  =  port
         self .username  =  username
         self .password  =  password
 
     def  ssh_con( self ,host,ip,cmd):
         ssh  =  paramiko.SSHClient()
         ssh.set_missing_host_key_policy(paramiko.AutoAddPolicy())
         ssh.connect(ip, self .port, self .username, self .password)
         stdin, stdout, stderr  =  ssh.exec_command(cmd)
         res,err  =  stdout.read(),stderr.read()
         result  =  res  if  res  else  err
         print ( '\033[31;1m%s %s\033[0m'  % (host,ip))
         print ( '\033[32;1m%s\033[0m'  % result.decode())
         ssh.close()
 
if  __name__  = =  '__main__' :
     client  =  OrderedDict([
         ( 'host1' , '1.1.1.1' ),
         ( 'host2' , '1.1.1.2' ),
         ( 'host2' , '2.2.2.2' ),
     ])                       # 主机列表 ,hostname:ip
     port      =  22            # 端口号
     username  =  'root'        # 用户名
     password  =  '123456789'   # 密码
 
     cmd  =  "ip route show match 1.1.1.0/24 | head -1"   # 要执行的命令
 
     ssh  =  SSh(port,username,password)
     for  in  client:
         host,ip  =  i,client[i]
         try :
             ssh.ssh_con(host,ip,cmd)
         except  WindowsError:
             print ( '\033[31;1m%s %s %s \033[0m\n'  % (host,ip, '连接尝试失败' ))
         except  Exception as e:
             print (e)

github地址:https://github.com/babyshen/Python/blob/master/batsh_ssh.py