Python+Django+Ansible Playbook自动化运维项目实战


一、资产管理,自动化发现、扫描

1、服务端资产探测、扫描发现

1)资产管理的资产:

2)抽象与约定:

2、探测协议和模块

1)探测协议

2)探测模块和工具

3)nmap工具探测使用

# Ubuntu安装
sudo apt install nmap# linux安装
yum install nmap# python安装
pip install python-nmap ==0.61
# 探测ip为192.168.1.155是否存活``nmap ``-``n ``-``sP ``-``EP ``192.168``.``1.155` `# 探测ip段的存活ip``nmap ``-``n ``-``sP ``-``EP ``192.168``.``1.155``/``24` `# -EP:返回数据包括端口都显示

4)python-nmap模块的使用

首先,在python环境下安装python-nmap模块,然后再使用python-nmap

import nmapnm = nmap.PortScanner()  # 端口服务、主机扫描
nm.scan(hosts='192.168.1.0/24',arguments='-n -sP -PE')   # 对hosts网端进行扫描
nm.all_hosts()  # 在局域网内只找已启用的ip

运行结果

nm.scan(hosts='192.168.1.0/24',arguments='-n -sP -PE'):

nm.all_hosts():


3、python中的telnet模块判断ssh服务主机

1)SSH端口存活扫描

判断主机列表是否属于Linux服务器:根据上面-抽象与约定

①、系统内部开通ssh服务端口的的为Linux服务器

②、开放的ssh端口范围:22 , 2022 , 202

telnet 命令:判断端口是否存活

telnet 192.168.1.155 22

输出结果:是linux服务器

telnetlib 模块:python模块,python自带

import telnetlib
tm = telnetlib.Telnet(host='192.168.1.155',port='22',timeout=4)
tm.read_until('\n',timeout=5) #执行ip 端口扫描,遇到换行便结束# 返回结果:
# 'SSH-2.0-OpenSSH_6.7p1 Raspbian-5+deb8u2\r\n'# 正则匹配,判断是否为linux服务器
import re
re.search('ssh',tm.read_until('\n',timeout=5))  # 如果为True ,则说明是linux服务器

小结:


4、主机登录探测

使用一系列的验证方式循环进行SSH登录,得到正确的登录方式:

1)使用ssh登录服务端:ssh -l root 192.168.1.155 -p 22 ,回车根据要求输入密码即可

sudo apt``-``get install openssh``-``server ``# Ubuntu下SSH安装` `/``etc``/``init.d``/``ssh start  ``# SSH 启动` `ssh ``-``l 用户名 本机ip ``-``p 端口  ``# SSH 登录

2)使用秘钥公钥登录

①、编辑:vim /etc/ssh/sshd_config

找到如下内容,确认已启用:

RSAAuthentication yes # 开启用户账号密码登录认证

PubkeyAuthentication yes # 开启公钥私钥登录认证

②、给当前用户生成公钥秘钥

执行指令:ssh-kengen

系统会自动为你生成公钥/私钥 两个文件 ,放置的路径:/home/用户/.ssh/ 下 。 公钥:id_rsa.pub , 私钥:id_rsa

如果出现:Enter passphrase(empty…)(输入加密串),可以不用理,直接回车

③、重命名或copy公钥文件:

mv id_rsa.pub authorized_keys # 重命名 ,必须命名为authorized_keys ,配置文件sshd_config中指定的 ,authorized_keys文件必须放在公钥的位置(home/用户/.ssh)

④、确保公钥文件权限600(rwx -111:7)

chmod 600 authorized_keys

⑤、将私钥copy到自己的客户端

如果是linux,则放到home/用户/.ssh 路径下


5、pexpect和paramiko模块

1)pexpect

①、安装:pip install pexpect

②、pexpect 的 run() 函数:

直接执行命令返回结果和状态

import pexpectpexpect.run("ls /tmp")  # 直接执行命令,打印 tmp目录下的文件pexpect.run("ls /tmp",withexitstatua=1) #打印的数据末尾有个数字,‘0’代表成功,‘1’代表执行失败

③、pexpect的spawn类

启动子程序,用丰富的方法实现对子程序的控制:

类的实例化

缓冲区内容匹配:正则匹配、pexpect.EOF、pexpect.TIMEOUT(正则表达式中的符号在pexpect中只代表符号在pexpect中只代表符号在pexpect中只代表符号,没有其他意义。要表示结尾可以用:\r\n,代表行结束)

向子程序发送指令

脚本模拟ssh登录

终端会话

import pexpect# chk = pexpect.spawn('ls -l /tmp/') # 实例化ssh_k = pexpect.spawn('ssh root%127.0.0.1 -p22') # 实例化ssh_k.expect('password:')   # 缓冲区内容匹配:实例化后执行,匹配子程序的执行情况,结果为0表示匹配成功

发送指令:

send() :默认多加一个回车符,sendline没有

sendline()

sendcontrol(char) :发送控制符

脚本模拟ssh登录

  • pexpect实现ssh的自动化 用户密码 登录
  • pexpect实现ssh的自动化 秘钥 登录
# -*- coding: utf-8 -*-import pexpectdef login_ssh_passwd(port="",user="",host="",passwd=""):'''函数:用于pexepect实现ssh的自动化用户密码登录'''# print 'ssh -p %s %s@%s' % (port,user, host)if  port and user and host and passwd:ssh = pexpect.spawn('ssh -p %s %s@%s' % (port,user, host)) # 实例化spawni = ssh.expect(['password:', 'continue connecting (yes/no)?'], timeout=5) # 执行缓冲区内容匹配,第一次登陆匹配(continue...),非第一次登陆匹配(password)if i == 0 : # 参数1的结果ssh.sendline(passwd) # 匹配到password ,发送密码过去elif i == 1: # 参数2的结果ssh.sendline('yes\n')ssh.expect('password: ')ssh.sendline(passwd)index = ssh.expect (["#", pexpect.EOF, pexpect.TIMEOUT])  # 匹配到'#',说明是root用户if index == 0: # root用户print "logging in as root!"ssh.interact()elif index == 1: # 错误EOFprint "logging process exit!"elif index == 2: # TIMEOUTprint "logging timeout exit"else:print "Parameter error!"def login_ssh_key(keyfile="",user="",host="",port=""):'''函数:用于实现pexepect实现ssh的自动化密钥登录'''if  port and user and host and keyfile:ssh = pexpect.spawn('ssh -i %s -p %s %s@%s' % (keyfile,port,user, host))i = ssh.expect( [pexpect.TIMEOUT,'continue connecting (yes/no)?'], timeout=2)# print '...................................',0if i == 1: # 表示第一次登陆ssh.sendline('yes\n')index = ssh.expect (["#", pexpect.EOF, pexpect.TIMEOUT])else: # 不是第一次登陆,就算安全登陆成功index = ssh.expect (["#", pexpect.EOF, pexpect.TIMEOUT])if index == 0:print "logging in as root!"ssh.interact()elif index == 1:print "logging process exit!"elif index == 2:print "logging timeout exit"else:print "Parameter error!"def main():'''主函数:实现两种方式分别的登录'''# login_ssh_passwd(port='22',user='root',host='192.168.1.101',passwd='imooccs')login_ssh_key(keyfile="/tmp/id_rsa",port='22',user='root',host='192.168.1.101')if __name__ == "__main__":main()

会话控制:

执行脚本模拟ssh登录时,登录成功执行了一个ssh.interact()方法,这个就是会话控制,模拟ssh登录成功,进入会话终端,可以进行登录服务器的终端操作

④、 pexpect模块缺陷


2)paramiko

一个基于python实现的SSH远程安全连接,用于SSH远程执行命令、文件传输等功能的ssh客户端模块

paramiko参考:https://www.cnblogs.com/Eric15/articles/9185291.html

①、安装

pip install paramiko  # 安装

②、实现ssh 账号密码 登录

import paramiko# 创建SSH对象
ssh = paramiko.SSHClient()
# 允许连接不在know_hosts文件中的主机
ssh.set_missing_host_key_policy(paramiko.AutoAddPolicy())
# 连接服务器
ssh.connect(hostname='c1.salt.com', port=22, username='wupeiqi', password='123')# 执行命令
stdin, stdout, stderr = ssh.exec_command('df')
# 获取命令结果   stdin可以先远程服务端输入指令(stdin.write(),stdout获取远程机器输出结果,stderr接收错误信息)
result = stdout.read()# 关闭连接
ssh.close()

③、实现ssh的密钥登录

import paramikoprivate_key = paramiko.RSAKey.from_private_key_file('/home/auto/.ssh/id_rsa')# 创建SSH对象
ssh = paramiko.SSHClient()
# 允许连接不在know_hosts文件中的主机
ssh.set_missing_host_key_policy(paramiko.AutoAddPolicy())
# 连接服务器
ssh.connect(hostname='c1.salt.com', port=22, username='wupeiqi', pkey=private_key)# 执行命令
stdin, stdout, stderr = ssh.exec_command('df')
# 获取命令结果
result = stdout.read()# 关闭连接
ssh.close()

⑤、paramiko的应用和缺陷


6、通过操作系统获取主机资产信息

1)如何通过登录系统获取信息

①、通过系统获取哪些信息

②、为什么要获取这些信息 (主机资产信息的重要性和探测对象)

  • 有利于识别资产设备
  • 是资产的基本信息,是自动化平台的基石

探测主机类型(探测对象):非docker容器的类型主机实体

③、获取信息的linux命令介绍

1、主机资产(系统主机名、系统版本)获取方式

系统主机名获取:hostname 、 uname -a 、 cat /etc/sysconfig/network(最后一个命令,cat用于centos,不适用Ubuntu) 等

系统版本获取:cat /etc/issue 、 cat /etc/redhat-release 、 uname 、 lsb_release

2、主机资产(mac地址信息)获取

linux系统:cat /sys/class/net/eht0/adress 、 ifconfig eth0 、 ip a

ESXI:esxcfg-vmknic -l

应用:

linux:cat /sys/class/net/[^vtlsb]*/address

ESXI:esxcfg-vmknic -l|awk ‘{print $8}’|grep ‘:’

通用于不同的操作系统:cat /sys/class/net/[^vtlsb]*/address||esxcfg-vmknic -l|awk ‘{print $8}’|grep ‘:’

3、主机资产(机器型号、sn序列号)获取

获取机器型号:dmidecode -s system-manufacturer 、 dmidecode -s system-product-name

获取sn序列号:dmidecode -s system-serial-number


7、yaml工程的配置文件读取

配置文件读取:yaml模块

是一种直观的能够被电脑识别的数据序列化格式,类似于xml。由于易于被解析,应用于工程中作程序读取的配置文件

安装:pip install PyYAML

使用:

import yamlmyconf = yaml.load(file('conf/scanhosts.yaml'))
print(myconf['hostsinfo']['nets'])
# 结果:[192.168.1]

参考链接:

https://www.cnblogs.com/Eric15/articles/9795725.html

Python+Django+Ansible Playbook自动化运维项目实战:资产管理相关推荐

  1. Python+Django+Ansible Playbook自动化运维项目实战(二)

    Python+Django+Ansible Playbook自动化运维项目实战 一.资产管理,自动化发现.扫描 1.服务端资产探测.扫描发现 1)资产管理的资产: 2)抽象与约定: 2.探测协议和模块 ...

  2. 自动化运维-----项目实战: 基于Ansible的云平台自动化运维系统

    文章目录 项目实战: 基于Ansible的云平台自动化运维系统 一.项目介绍 1.项目介绍 2.项目背景 二.项目环境搭建 1.项目目录的配置 2.远程服务器虚拟环境的配置 3.MySQL数据库配置 ...

  3. python实现自动化运维项目_Python自动化运维项目开发最佳实战

    下载地址:五号服务器---VIP资料下载七区\VIP专题教程二区 游客,如果您要查看本帖隐藏内容请回复 Python 自动化运维项目开发最佳实战 这个远比什么老男孩的python好的多 2017-1- ...

  4. [Ansible 概述]Ansible 的自动化运维

    一.Ansible 概述加粗样式 Ansible 是目前最受运维欢迎的自动化运维工具,基于Python开发,集合了众多运维工具(SaltStack puppet.chef.func.fabric)的优 ...

  5. 一文详解 Ansible 的自动化运维

    一.Ansible 概述 Ansible 是近年来越来越火的一款开源运维自动化工具,通过Ansible可以实现运维自动化,提高运维工程师的工作效率,减少人为失误. Ansible 通过本身集成的非常丰 ...

  6. python linux系统管理与自动化运维_《Python Linux系统管理与自动化运维》赖明星著【摘要 书评 在线阅读】-苏宁易购图书...

    商品参数 作者: 赖明星著 出版社:机械工业出版社 出版时间:2017-09-01 版次:1 开本:16开 装帧:平装 ISBN:9787111578659 版权提供:机械工业出版社 基本信息 商品名 ...

  7. 云计算开发教程:Python自动化运维开发实战流程控制

    今天这篇文章是给大家分享一些云计算开发教程,今天讲解的是:Python自动化运维开发实战流程控制. Python条件语句是通过一条或多条语句的执行结果(True或者False)来决定执行的代码块. P ...

  8. 云计算Python自动化运维开发实战 三、python文件类型

    为什么80%的码农都做不了架构师?>>>    云计算Python自动化运维开发实战 三.python文件类型 导语: python常用的有3种文件类型 1. 源代码     py ...

  9. 银行自动化运维项目前期规划八大难点

     难点一:自动化运维项目,如何进行技术路线的选择? 就笔者所了解的,自动化运维项目有以下四条技术路线供大家参考 1.基于开源工具自研 基于社区活跃度高.口碑好.功能强大的开源自动化工具,进行二次开发, ...

最新文章

  1. python3 str() repr() 区别
  2. python显示当前中文日期_python自动提取文本中的时间(包含中文日期)
  3. django mysql connector,MySQL Connector / Python作为Django引擎?
  4. SAP系统里的胖接口Fat interface
  5. 深入理解python面向对象_转:Python3 面向对象,较为深入的两个理解
  6. 【angularJS】简介
  7. 使用javafx百行代码搞定多边形面积计算(可下载)
  8. wringPi 初始化GPIO 为上拉_玩转GPIO之PWM点亮呼吸灯(非树莓派)
  9. 计算机动漫设计VR主要学什么,VR动漫制作怎么学?
  10. 以太坊2.0合约余额新增3872 ETH
  11. TikTok 与 Oracle 的交易将开创两个危险的先例
  12. 给定一个数组,将所有的元素在一行里打印出来,中间以逗号分开
  13. 百度智能云-文字识别SDK-识别验证码Demo
  14. Word中删除空白页的4种方法
  15. Vue父组件传参数给子组件时,页面崩溃或者报undefined或者数据为空或者执行了两遍
  16. linux洪水攻击软件,Linux遭受SYN洪水攻击设置
  17. 波士顿大学计算机硕士排名,GPA3.25却获波士顿大学计算机硕士录取
  18. mysql和mongodb查询性能测试_MongoDB 模糊查询,及性能测试
  19. html语言制作折线图,html5绘制折线图
  20. 在Mac上使用中国银行和工商银行网银

热门文章

  1. 学业水平考试网登录_江西学业水平考试成绩查询登录入口
  2. access开发精要(1)-字段验证
  3. C指针原理(9)-C内嵌汇编
  4. 线性代数回顾.pptx
  5. 【Python】B 站上这些 Python 视频真香!
  6. 【收藏】机器学习入门的常见问题集(文末送书)
  7. 推荐:常见NLP模型的代码实现(基于TensorFlow和PyTorch)
  8. python进阶之多进程
  9. 从0搭建在线聊天室,只需4步!
  10. 链路追踪技术的应用及实践