小试牛刀之python实现批量获取主机相关数据

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了小试牛刀之python实现批量获取主机相关数据相关的知识,希望对你有一定的参考价值。

一、场景概述

    刚入职新公司的第3天,接到任务说需要获取100多台物理服务器的信息,其中有:主机名、IP地址、磁盘数量,磁盘设备编号。悲催的是现有的生产环境没有任何可用的工具去做这个事情,本想用Ansible去搞,但因对ansible还不是很熟悉,因此决定徒手撸一个脚本来实现,所以呢才有了此脚本的诞生。

二、脚本的基本思路

    1、python pexpect模块,用该模块来实现ssh连接

    2、连接后在远程主机跑相关命令

    3、返回结果

    4、返回的结果随便你怎么处理,可视化也好,分析也好,存储到数据库也行

三、代码如下

#!/usr/bin/env python
#Describe:
#	Gets the physical hard disk number of each host
#Author: Tantianran
#Email:	[email protected]
#time:	2016-10-09 17:28
# -*- coding: utf-8 -*-

import pexpect

def ssh_cmd(ip,shell_cmd):
passwd = ‘1qaz#EDC‘
ssh = pexpect.spawn(‘ssh [email protected]%s "%s"‘ % (ip, shell_cmd))
try:
i = ssh.expect([‘password:‘, ‘continue connecting (yes/no)?‘], timeout=5)
if i == 0 :
ssh.sendline(passwd)
elif i == 1:
ssh.sendline(‘yes\n‘)
ssh.expect(‘password: ‘)
ssh.sendline(passwd)
ssh.expect(‘#‘)
ssh.sendline(shell_cmd)
ssh.expect(‘#‘)
except pexpect.EOF:
data = ssh.before    #读取shell命令运行的结果
ssh.close()
except pexpect.TIMEOUT:
print "Connect Timeout..."
ssh.close()
return data    #返回shell命令运行结果
def get_host():
cmd = ‘‘‘
name=`hostname`
ip=`ifconfig eth0 | grep inet|grep -v 127.0.0.1|grep -v inet6|awk ‘{print $2}‘`
disk=`ls -l /dev/vd[a-z] | wc -l`
list=`ls -l /dev/vd[a-z] | awk ‘{print $10}‘`
echo "hostname:"$name "ip"$ip "disk:"$disk "info:"$list
‘‘‘
return cmd

for i in range(165,167):
ipaddr = ‘192.168.122.%s‘ % i
data = ssh_cmd(ipaddr,get_host())
print data
f = open(‘host_info.txt‘,‘a‘)
f.write(data)

四、测试环境说明

在写这个脚本的时候,建立了两台VM用来模拟生产环境的一个场景。    VM01:192.168.122.165,VM02:192.168.122.166

本文出自 “我的运维和我的那些原创” 博客,请务必保留此出处http://trtan.blog.51cto.com/8272891/1862140

以上是关于小试牛刀之python实现批量获取主机相关数据的主要内容,如果未能解决你的问题,请参考以下文章

Python进阶(十八)Python3爬虫小试牛刀

shell之expect应答语句(用shell脚本实现获取批量主机存活信息)

shell之expect应答语句(用shell脚本实现获取批量主机存活信息)

shell之expect应答语句(用shell脚本实现获取批量主机存活信息)

自动化运维工具之:dcli 批量管理数据库主机

牛刀小试之Django二