多台设备批量执行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
i
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
本文转自 baby神 51CTO博客,原文链接:http://blog.51cto.com/babyshen/1910341,如需转载请自行联系原作者