小试牛刀之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

时间: 2024-10-06 11:03:07

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

使用python编写批量ping主机脚本

通过使用python,编写脚本批量ping主机,验证主机是否处于活动状态 #!/usr/bin/python #auther: Jacky #date: 2016-08-01 #filename: ping_ip.py import os,sys import subprocess,cmd def subping():     f = open("ip_list.txt","r")     lines = f.readlines()     for line in 

Oracle Function:当页面端有屏蔽相关字段数据函数,只有指定用户才能查看;而当前用户无法获取到相关数据插到其他表中,这时需要获取后台用户替换当前用户,执行完相关语句后再还原为当前用户。

1.该函数的作用:入库单提交/审核通过时,将相关数据插到/更新'出入库历史记录表':delivery_entering_record 由于页面端屏蔽了单价,指定的用户才能看到,故 与单价有关的数据插不进"出入库历史记录表"delivery_entering_record中,所以要用后台的用户替换当前用户,执行完相关语句后,在还原为当前用户(如代码:178~184和第208行所示):否则,插进去的数据全为0. 1 create or replace function delivery_e

使用gethostname()函数和gethostbyname()函数获取主机相关信息

from http://ty1992.blog.51cto.com/7098269/1685880 gethostname() : 返回本地主机的标准主机名. 原型如下: #include <unistd.h> int gethostname(char *name, size_t len); 参数说明: 这个函数需要两个参数: 接收缓冲区name,其长度必须为len字节或是更长,存获得的主机名. 接收缓冲区name的最大长度 返回值: 如果函数成功,则返回0.如果发生错误则返回-1.错误号存放

使用gethostnam()函数和gethostbyname()函数获取主机相关信息

gethostname() : 返回本地主机的标准主机名. 原型如下: #include <unistd.h> int gethostname(char *name, size_t len); 参数说明: 这个函数需要两个参数: 接收缓冲区name,其长度必须为len字节或是更长,存获得的主机名. 接收缓冲区name的最大长度 返回值: 如果函数成功,则返回0.如果发生错误则返回-1.错误号存放在外部变量errno中. gethostbyname()函数说明--用域名或主机名获取IP地址  

获取主机相关信息脚本

考核内容 awk 编辑文件抓取ip信息抓取登录用户执行脚本 原文地址:https://blog.51cto.com/14190777/2434108

2019/1/15 批量删除数据库相关数据

目的:删除数据库各个系统his库里的测试soe与故障数据:一.sql执行错误:执行sql:SELECT FROM SOE WHERE sDevCode = 012400000001报错:[SQL Server]将 varchar 转换为数据类型 numeric 时出现算术溢出错误.原因:查看表设计,sDevCode列的类型为varchar(字符串),修改:SELECT FROM SOE WHERE sDevCode = '012400000001' .二.脚本: -- coding:UTF-8

如何用python从文中获取文件名再用正则表达式批量修改文件名

第零步:问题的提出 我在网上购买了星火英语的六级晨读美文100篇(六级早已高分飘过,不过很喜欢这些文章,买来重新品味),但是发现其文章的命名都为01.txt或10.txt等.为了便于检索需要修改文件名称. 第一步:从文件中取出文件名. 我发现txt文件的第一行为文件名,格式为如:Passage 3. Three Passions I Have Lived for, 后面还有几个换行符.写下如下代码进行第一步修改: import os x = 1 while x < 101: if x < 10

python的os模块批量获取目标路径下的文件名

目前在做一个项目开发与变更专项稽核,但是所抽取的目标项目,样本所附电子版文件上千个,需要判断文档完整性,就需要所有文档名清单. python的os模块好像是对这块比较擅长,就去翻了下文档,试着写了,效果还可以. 1 import os 2 3 #通过文件获取目标路径 4 file2=open(r'd:\dirname.txt','r') 5 a=file2.readlines() 6 file2.close() 7 8 #遍历目标路径下文件路径及名字,并写入新文件abc.txt 9 file1=

Python批量获取京东商品列表信息

今天在逛网站的时候无意间发现一个京东获取单个商品价格接口: http://p.3.cn/prices/mgets?skuIds=J_商品ID&type=1 用例 ps:商品ID这么获取:http://item.jd.com/954086.html 于是我就从Google上找了利用此接口批量获取价格信息的源码,稍作修改使其支持Python3(PS:通过这段代码,我对Python的易用性不再怀疑了,23333) #!/usr/bin/env python # -*- coding: utf-8 -*