项目参考代码: https://github.com/lvah/cmdb
项目介绍:
本项目通过KVM虚拟化搭建Linux系统集群,使用 Ansible实现Linux集群下的批量部署与自动化管理,
实现Web形式的自动化运维系统,集中批量控制服务器, 最终实现能支撑1000台实例的环境提供管理和自
动化任务, 提高运维工程师的工作质量和效率。 项目基于HTTP实现自动化任务接受和响应接口设计,
基于MySQL用作的关系型数据存取, 基于Redis的任务锁机制和消息队列, 基于MongoDB的事件日志
记录, 最终实现邮件通知功能、敏感数据加密功能、日志事件记录功能。
这个文档主要目标是实现自动化资产扫描, 扫描指定网段的服务器资产信息。
1. 探测局域网哪些主机是存活的(python-nmap)
2. 探测存活主机的ssh端口(22)是否打开?(telnet)
3. 如果ssh端口打开,则可以远程连接查询主机信息(pexpect和paramiko)
步骤一,主机存活探测模块和工具
1)Nmap探测工具 (Linux 系统命令)
Nmap,也就是Network Mapper,最早是Linux下的网络扫描和嗅探工具包。是一款用于网络发现和安
全审计的网络安全工具。
-
nmap -n -sp 命令 :主机发现 - 识别网络上的主机。例如,列出响应TCP和/或ICMP请求或打开特定端口的主机。
- nmap -p 命令 :端口扫描 - 枚举目标主机上的开放端口。
-
nmap -O 命令 :OS检测 - 确定网络设备的操作系统和硬件特性。
2)Nmap 的 Python操作接口: python-nmap
python-nmap是一个使用nmap进行端口扫描的python库,它可以很轻易的生成nmap扫描报告,并且
可以帮助系统管理员进行自动化扫描任务和生成报告。同时,它也支持nmap脚本输出。
- pip3 install python-nmap -i https://pypi.douban.com/simple # 安装 nmap的第三方模块
步骤二,SSH端口存活扫描
1)telnet命令。
2)telnet 的 Python 模块: telnetlib
telnetlib模块提供的Telnet类实现了Telnet协议。
扫描探测小结:
- python-nmap 模块:已启用的设备的 IP 列表 (live_ip.list)
- telnetlib 模块:
- Y , Linux 服务主机 IP 列表 (linux_ip.list)
- NO, 非Linux 服务主机 IP 列表 (nolinux_ip.list)
步骤三,主机登录探测
主机SSH登录验证方式
SSH常用来远程登录到远程机器,有两种常用的方法:
- 第一种便是账号密码登录。
- 第二种就是公钥私钥无密码登录。(如何实现无密码登录?)
1)Python 的SSH登录模块之一 pexpect
Pexpect 用来实现与 ssh、ftp 、telnet 等程序的自动交互。是 Expect 语言的一个 Python 实现,是 一个用来启动子程序,并使用正则表达式对程序输出做出特定响应,以此实现与其自动交互的 Python 模块。
2)Python 的SSH登录模块之一 paramiko (重要)
paramiko是一个用于做远程控制的模块,使用该模块可以对远程服务器进行命令或文件操
作,paramiko是用python语言写的一个模块,遵循SSH2协议,支持以加密和认证的方式,进行远 程服务器的连接。
模块的安装:
- pip3 install paramiko -i https://pypi.douban.com/simple # 安装 paramiko 模块
paramiko核心组件:
paramiko包含两个核心组件:SSHClient 和 SFTPClient(sftp=ssh file transfer protocol)。 SSHClient的作用类似于Linux的ssh命令,是对SSH会话的封装,该类封装了传输
(Transport),通道(Channel)及SFTPClient建立的方法(open_sftp),通常用于执行远程命令。 SFTPClient的作用类似与Linux的sftp命令,是对SFTP客户端的封装,用以实现远程文件操 作,如文件上传、下载、修改文件权限等操作。
项目代码: 基于paramiko实现ssh客户端密码远程登录
步骤四,系统信息获取
获取信息的Linux命令介绍:
- 获取主机名的命令(选择通用方式): hostname、uname -a、cat /etc/sysconfig/network(主 要针对Centos)
- 获取系统版本: cat /etc/issue(可能为空)、cat /etc/redhat-release、uname、lsb_release
- 获取MAC地址: cat /sys/class/net/ [^vtlsb]*/address、ifconfig ens33
- 获取服务器硬件机型: dmidecode -s system-manufacturer、dmidecode -s system- product-name
CMDB项目 —— 仓库代码链接:https://github.com/dodo837132863/CMDB.git
创建子应用 —— hostinfo
- python3 manage.py startapp hostinfo
- 在 /CMDB/setting.py中 INSTALLED_APPS = [...'hostinfo'], # 添加子应用
后台管理设置
编辑 models.py文件,添加后台管理 数据信息
数据库
- SQLlite数据库模型 创建与使用(默认使用) # /CMDB/setting.py 中
- python3 manage.py makemigrations # 生成数据库迁移文件 /migrations/0001_initial.py
- python3 manage.py migrate # 将数据写入到迁移文件中
- 在 界面 最右侧 database 中添加并查看生成的项目数据库
- 拷贝数据存储文件(/CMDB/db.sqlite3)的 路径
- 按照数据库类型添加数据库,并配置
附:MSQL数据库创建
- /CMDB/setting.py 中 手动添加 数据库配置信息
- mysql -uroot -p123 # 根据添加的信息,在本地创建 MSQL数据库
- create database CMDB default charset='utf8'; # 创建完成后,其他操作同上
创建后台管理的超级用户
- python3 manage.py createsuperuser
将自定义创建的数据库模型,添加到后台进行管理
- 编辑 /CMDB/hostinfo/admin.py 文件
python3 manage.py runserver # 运行项目,登录后台测试
Django version 3.0.8, using settings 'CMDB.settings'
Starting development server at http://127.0.0.1:8000/ # 登录 http://127.0.0.1:8000/admin
上传 GitHub 中的共享仓库 —— CMDB
- git init
- git add *
- git commit -m "项目数据库与后台管理"
- git remote add origin https://github.com/dodo837132863/CMDB.git
- git push -u origin master
前台管理设置
自定义配置 (资产探测后,针对信息的处理反馈),在/CMBD/setting.py 添加
视图函数