目的:
通过代码的形式,获取服务器的信息,并做成一个表格。
缘由:
校招生,渣本,毕业上班,想着可能会面临定期检测多台服务器的设备状态,所以写个脚本避免后期无脑一台台ssh。
不足:
代码能够运行,暂时能达到现在所需要的效果,但是依旧有许多地方需要修改。
实现代码:
import paramiko
import xlwt
import xlrd
import re
from xlutils.copy import copy
import threading
#连接的服务器
data = [
{'host': '192.168.129.129', 'user': 'root', 'password': '123qwe'}
]
#将要执行的命令
command = {
'剩余内存(KB)':'cat /proc/meminfo | grep MemFree',
'总共内存(KB)':'cat /proc/meminfo | grep MemTotal',
'物理处理器数量':'cat /proc/cpuinfo | grep "physical id" | sort | uniq | wc -l',
'处理器核数':'cat /proc/cpuinfo | grep "cpu cores" | uniq',
}
#创建EXCEL
def excel_menu():
workbook = xlwt.Workbook(encoding='utf-8')
worksheet = workbook.add_sheet('MyWorksheet',cell_overwrite_ok=True)
worksheet.write(0, 0, label='您点检的设备')
for i in range(0,len(data)):
worksheet.write(i+1,0, label=data[i]['host'])
k=0
for i in command:
worksheet.write(0,k+1,label=i)
k+=1
workbook.save('服务器点检表.xls')
#获取单个服务器的data,存入列表
def get_data(hostname,username,password):
L=[]
ssh = paramiko.SSHClient()
ssh.set_missing_host_key_policy(paramiko.AutoAddPolicy()) # 允许连接不在know_hosts文件中的主机
try:
ssh.connect(hostname=hostname, username=username, password=password)
#有疑问,到底要不要加
for key, value in command.items():
stdin, stdout, stderr = ssh.exec_command(value)
res, err = stdout.read(), stderr.read()
res = re.findall('\d', str(res, 'utf8'))
res = int(''.join(res))
L.append(res)
except:
print('请检查'+hostname+'的网络连接')
return L
#对单个服务器数据进行excel插入
def insert_to_excel(hang,datas):
DX = xlrd.open_workbook('服务器点检表.xls')
w = copy(DX)
sheet = w.get_sheet(0)
# 打开sheet
for i in range(0,len(datas)):
sheet.write(hang, i+1, label=str(datas[i]))
# 修改内容
for i in range(0,10):
sheet.col(i).width = 15*256
w.save('服务器点检表.xls')
# 保存sheet
#创建表格
excel_menu()
#行自加
hang= 0
#main函数
def run(host,user,password,hang):
w = get_data(host,user,password)
insert_to_excel(hang, w)
#多线程
for ip in data:
hang+=1
T =threading.Thread(target=run,args=(ip['host'],ip['user'],ip['password'],hang,))
T.start()
T.join()