运维审计系统

安装paramiko模块

wget http://ftp.dlitz.net/pub/dlitz/crypto/pycrypto/pycrypto-2.6.tar.gz

tar zxvf pycrypto-2.6.tar.gz

cd pycrypto-2.6

python setup.py build && python setup.py install

wget https://pypi.python.org/packages/source/p/paramiko/paramiko-1.12.1.tar.gz

tar zxvf paramiko-1.12.1.tar.gz

cd paramiko-1.12.1

python setup.py build && python setup.py install

创建一个用户

useradd abc

cd /home/abc

cp demo.py /home/abc/

cp interactive.py /home/abc/

chown abc:abc demo.py interactive.py

vim demo.py  ##更改部分内容

import base64

from binascii import hexlify

import getpass

import os

import select

import socket

import sys

import time

import traceback

import tab

import paramiko

import interactive

def agent_auth(transport, username):

"""

Attempt to authenticate to the given transport using any of the private

keys available from an SSH agent.

"""

agent = paramiko.Agent()

agent_keys = agent.get_keys()

if len(agent_keys) == 0:

return

for key in agent_keys:

print ‘Trying ssh-agent key %s‘ % hexlify(key.get_fingerprint()),

try:

transport.auth_publickey(username, key)

print ‘... success!‘

return

except paramiko.SSHException:

print ‘... nope.‘

def manual_auth(username, hostname):

default_auth = ‘p‘

auth = raw_input(‘Auth by (p)assword, (r)sa key, or (d)ss key? [%s] ‘ % default_auth)

if len(auth) == 0:

auth = default_auth

if auth == ‘r‘:

default_path = os.path.join(os.environ[‘HOME‘], ‘.ssh‘, ‘id_rsa‘)

path = raw_input(‘RSA key [%s]: ‘ % default_path)

if len(path) == 0:

path = default_path

try:

key = paramiko.RSAKey.from_private_key_file(path)

except paramiko.PasswordRequiredException:

password = getpass.getpass(‘RSA key password: ‘)

key = paramiko.RSAKey.from_private_key_file(path, password)

t.auth_publickey(username, key)

elif auth == ‘d‘:

default_path = os.path.join(os.environ[‘HOME‘], ‘.ssh‘, ‘id_dsa‘)

path = raw_input(‘DSS key [%s]: ‘ % default_path)

if len(path) == 0:

path = default_path

try:

key = paramiko.DSSKey.from_private_key_file(path)

except paramiko.PasswordRequiredException:

password = getpass.getpass(‘DSS key password: ‘)

key = paramiko.DSSKey.from_private_key_file(path, password)

t.auth_publickey(username, key)

else:

pw = getpass.getpass(‘Password for %[email protected]%s: ‘ % (username, hostname))

t.auth_password(username, pw)

# setup logging

paramiko.util.log_to_file(‘demo.log‘)

username = ‘‘

if len(sys.argv) > 1:

hostname = sys.argv[1]

if hostname.find(‘@‘) >= 0:

username, hostname = hostname.split(‘@‘)

else:

hostname = raw_input(‘Hostname: ‘)

if len(hostname) == 0:

print ‘*** Hostname required.‘

sys.exit(1)

port = 22

if hostname.find(‘:‘) >= 0:

hostname, portstr = hostname.split(‘:‘)

port = int(portstr)

# now connect

try:

sock = socket.socket(socket.AF_INET, socket.SOCK_STREAM)

sock.connect((hostname, port))

except Exception, e:

print ‘*** Connect failed: ‘ + str(e)

traceback.print_exc()

sys.exit(1)

try:

t = paramiko.Transport(sock)

try:

t.start_client()

except paramiko.SSHException:

print ‘*** SSH negotiation failed.‘

sys.exit(1)

try:

keys = paramiko.util.load_host_keys(os.path.expanduser(‘~/.ssh/known_hosts‘))

except IOError:

try:

keys = paramiko.util.load_host_keys(os.path.expanduser(‘~/ssh/known_hosts‘))

except IOError:

print ‘*** Unable to open host keys file‘

keys = {}

# check server‘s host key -- this is important.

key = t.get_remote_server_key()

if not keys.has_key(hostname):

print ‘*** WARNING: Unknown host key!‘

elif not keys[hostname].has_key(key.get_name()):

print ‘*** WARNING: Unknown host key!‘

elif keys[hostname][key.get_name()] != key:

print ‘*** WARNING: Host key has changed!!!‘

sys.exit(1)

else:

print ‘*** Host key OK.‘

# get username

if username == ‘‘:

default_username = getpass.getuser()

username = raw_input(‘Username [%s]: ‘ % default_username)

if len(username) == 0:

username = default_username

agent_auth(t, username)

if not t.is_authenticated():

manual_auth(username, hostname)

if not t.is_authenticated():

print ‘*** Authentication failed. :(‘

t.close()

sys.exit(1)

chan = t.open_session()

chan.get_pty()

chan.invoke_shell()

print ‘*** Here we go!‘

print

interactive.interactive_shell(chan,username,hostname)

chan.close()

t.close()

except Exception, e:

print ‘*** Caught exception: ‘ + str(e.__class__) + ‘: ‘ + str(e)

traceback.print_exc()

try:

t.close()

except:

pass

sys.exit(1)

vim interactive.py  ##更改部分内容

import base64

from binascii import hexlify

import getpass

import os

import select

import socket

import sys

import time

import traceback

import tab

import paramiko

import interactive

def agent_auth(transport, username):

"""

Attempt to authenticate to the given transport using any of the private

keys available from an SSH agent.

"""

agent = paramiko.Agent()

agent_keys = agent.get_keys()

if len(agent_keys) == 0:

return

for key in agent_keys:

print ‘Trying ssh-agent key %s‘ % hexlify(key.get_fingerprint()),

try:

transport.auth_publickey(username, key)

print ‘... success!‘

return

except paramiko.SSHException:

print ‘... nope.‘

def manual_auth(username, hostname):

default_auth = ‘p‘

auth = raw_input(‘Auth by (p)assword, (r)sa key, or (d)ss key? [%s] ‘ % defa

if len(auth) == 0:

auth = default_auth

if auth == ‘r‘:

default_path = os.path.join(os.environ[‘HOME‘], ‘.ssh‘, ‘id_rsa‘)

path = raw_input(‘RSA key [%s]: ‘ % default_path)

if len(path) == 0:

path = default_path

try:

key = paramiko.RSAKey.from_private_key_file(path)

except paramiko.PasswordRequiredException:

password = getpass.getpass(‘RSA key password: ‘)

key = paramiko.RSAKey.from_private_key_file(path, password)

t.auth_publickey(username, key)

elif auth == ‘d‘:

default_path = os.path.join(os.environ[‘HOME‘], ‘.ssh‘, ‘id_dsa‘)

path = raw_input(‘DSS key [%s]: ‘ % default_path)

if len(path) == 0:

path = default_path

try:

key = paramiko.DSSKey.from_private_key_file(path)

except paramiko.PasswordRequiredException:

password = getpass.getpass(‘DSS key password: ‘)

key = paramiko.DSSKey.from_private_key_file(path, password)

t.auth_publickey(username, key)

else:

pw = getpass.getpass(‘Password for %[email protected]%s: ‘ % (username, hostname))

t.auth_password(username, pw)

# setup logging

paramiko.util.log_to_file(‘demo.log‘)

username = ‘‘

if len(sys.argv) > 1:

hostname = sys.argv[1]

if hostname.find(‘@‘) >= 0:

username, hostname = hostname.split(‘@‘)

else:

hostname = raw_input(‘Hostname: ‘)

if len(hostname) == 0:

print ‘*** Hostname required.‘

sys.exit(1)

port = 22

if hostname.find(‘:‘) >= 0:

hostname, portstr = hostname.split(‘:‘)

port = int(portstr)

# now connect

try:

sock = socket.socket(socket.AF_INET, socket.SOCK_STREAM)

sock.connect((hostname, port))

except Exception, e:

print ‘*** Connect failed: ‘ + str(e)

traceback.print_exc()

sys.exit(1)

try:

t = paramiko.Transport(sock)

try:

t.start_client()

except paramiko.SSHException:

print ‘*** SSH negotiation failed.‘

sys.exit(1)

try:

keys = paramiko.util.load_host_keys(os.path.expanduser(‘~/.ssh/known_hos

except IOError:

try:

keys = paramiko.util.load_host_keys(os.path.expanduser(‘~/ssh/known_

except IOError:

print ‘*** Unable to open host keys file‘

keys = {}

# check server‘s host key -- this is important.

key = t.get_remote_server_key()

if not keys.has_key(hostname):

print ‘*** WARNING: Unknown host key!‘

elif not keys[hostname].has_key(key.get_name()):

print ‘*** WARNING: Unknown host key!‘

elif keys[hostname][key.get_name()] != key:

print ‘*** WARNING: Host key has changed!!!‘

sys.exit(1)

else:

print ‘*** Host key OK.‘

# get username

if username == ‘‘:

default_username = getpass.getuser()

username = raw_input(‘Username [%s]: ‘ % default_username)

if len(username) == 0:

username = default_username

agent_auth(t, username)

if not t.is_authenticated():

manual_auth(username, hostname)

if not t.is_authenticated():

print ‘*** Authentication failed. :(‘

t.close()

sys.exit(1)

chan = t.open_session()

chan.get_pty()

chan.invoke_shell()

print ‘*** Here we go!‘

print

interactive.interactive_shell(chan,username,hostname)

chan.close()

t.close()

except Exception, e:

print ‘*** Caught exception: ‘ + str(e.__class__) + ‘: ‘ + str(e)

traceback.print_exc()

try:

t.close()

except:

pass

sys.exit(1)

[[email protected] audit_agent]# cat interactive.py

# Copyright (C) 2003-2007  Robey Pointer <[email protected]>

#

# This file is part of paramiko.

#

# Paramiko is free software; you can redistribute it and/or modify it under the

# terms of the GNU Lesser General Public License as published by the Free

# Software Foundation; either version 2.1 of the License, or (at your option)

# any later version.

#

# Paramiko is distributed in the hope that it will be useful, but WITHOUT ANY

# WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR

# A PARTICULAR PURPOSE.  See the GNU Lesser General Public License for more

# details.

#

# You should have received a copy of the GNU Lesser General Public License

# along with Paramiko; if not, write to the Free Software Foundation, Inc.,

# 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA.

import socket

import sys,os,datetime,time,tab

# windows does not have termios...

try:

import termios

import tty

has_termios = True

except ImportError:

has_termios = False

def interactive_shell(chan,remoteuser,hostname):

if has_termios:

posix_shell(chan,remoteuser,hostname)

else:

windows_shell(chan)

def posix_shell(chan,remoteuser,hostname):

import select

oldtty = termios.tcgetattr(sys.stdin)

try:

tty.setraw(sys.stdin.fileno())

tty.setcbreak(sys.stdin.fileno())

chan.settimeout(0.0)

record = []

record_dic = {}

day_time = time.strftime(‘%Y_%m_%d‘)

#triaquae_path = tri_config.Working_dir

f = open(‘/home/audit_agent/audit_%s_%s.log‘ % (day_time,remoteuser), ‘a‘)

while True:

data = time.strftime(‘%Y_%m_%d %H:%M:%S‘)

r, w, e = select.select([chan, sys.stdin], [], [])

if chan in r:

try:

x = chan.recv(1024)

if len(x) == 0:

print ‘\r\n*** EOF\r\n‘,

break

sys.stdout.write(x)

sys.stdout.flush()

except socket.timeout:

pass

if sys.stdin in r:

x = sys.stdin.read(1)

if len(x) == 0:

break

record.append(x)

chan.send(x)

if x == ‘\r‘:

cmd = ‘‘.join(record).split(‘\r‘)[-2]

log = "%s | %s | %s | %s\n" % (hostname,data,remoteuser,cmd)

f.write(log)

f.flush()

f.close()

finally:

termios.tcsetattr(sys.stdin, termios.TCSADRAIN, oldtty)

# thanks to Mike Looijmans for this code

def windows_shell(chan):

import threading

sys.stdout.write("Line-buffered terminal emulation. Press F6 or ^Z to send EOF.\r\n\r\n")

def writeall(sock):

while True:

data = sock.recv(256)

if not data:

sys.stdout.write(‘\r\n*** EOF ***\r\n\r\n‘)

sys.stdout.flush()

break

sys.stdout.write(data)

sys.stdout.flush()

writer = threading.Thread(target=writeall, args=(chan,))

writer.start()

try:

while True:

d = sys.stdin.read(1)

if not d:

break

chan.send(d)

except EOFError:

# user hit ^Z or F6

pass

从其他用户目录下拷贝.bashrc文件

vim .bachrc  ##在最护添加两行

python demo.py

logout

时间: 2024-10-01 23:47:24

运维审计系统的相关文章

运维审计

定义 运维审计系统即通常所说的堡垒机,用于组织(如企业或政府机构)内部数据安全的一种监管系统. 目的 身份认证.授权管理.访问控制.运维审计. 法律依据 发展历程 部署方案 常见功能 采用统一入口,集中化运维管理,记录运维人员的权限和操作. 原文地址:http://blog.51cto.com/juispan/2141999

运维知识系统和分类

运维分类: 机房运维(负责设备上下架.巡检.报修.硬件监控) 基础设施运维(系统初始化.网络维护) 基础服务运维(内部DNS.负载均衡.系统监控.资产管理.运维平台)包含运维开发 系统运维(架构层面的分布式缓存.分布式文件系统.日志收集.环境规划(测试.开发.生产).架构设计.性能优化) 安全运维(整体的安全方案.规范.漏洞监测.安全防护等) 应用运维(业务熟悉.服务部署.业务部署.版本管理.灰度发布.应用监控) 监控运维(7*24运维值班.故障处理) 转自:https://www.unixho

ylbtech-KeFuYunWei(服务运维考核系统)-数据库设计

ylbtech-DatabaseDesgin:ylbtech-KeFuYunWei(服务运维考核系统)-数据库设计 DatabaseName:KEFUYUNWEI Model:Admin 用户后台管理数据设计 Type:管理软件 Url: 1.A,数据库关系图(Database Diagram) 返回顶部 1.B,数据库设计脚本(Database Design Script)返回顶部 use master go -- =======================================

Open-falcon运维监控系统——微信接口二次开发

1.Open-falcon运维监控系统简介 OpenFalcon是一款由小米运维团队从互联网公司的需求出发, 根据多年的运维经验,结合市面上使用的一些运维监控系统的使用经验和反馈,开发的一套企业级.高可用.可扩展的开源监控解决方案.简单了使用一下Open-falcon运维监控,结合使用过的zabbix,cacti,nagios来说,觉得有以下几个优点: 支持用户主动push,可以结合一些业务需求采集数据,同时也支持用户自定义的插件. 支持策略模板,模板继承和覆盖,多种告警方式,支持callbac

互联网模式的企业如何运维IT系统(一)

难.难.难,不少人都摇头,确实因为实际困难太多,不确定因素太多,用户访问的高峰期不好预测,用户的访问偏好要事后才能分析,突发新闻或事件或帖子让峰值突然出现,企业的资源设备有限,各软硬件的疲劳期不好预测,每个业务系统都对维护有高要求,有时只能顾一部分,遇到突发事件,各领导电话和指示不断等等,确实是一件不好干的活,今年刚过去的春节抢红包这个热点顺利通过,应该为这些节假日坚守岗位的运维人致敬,他们到底是怎么做的呢,看看事件整个过程:2015年微信红包,除夕摇一摇总次数110亿次,峰值1400万次/秒,

一套准备开源的运维部署系统

利用空余时间,前前后后花了20多天的时候写了这套系统,因为之前在前公司一个人写了一套轻量级的部署系统(主要是方便开发部署代码),解放运维劳动力.所以在原来底层功能上新加了一些功能,然后换了前端模板,之前的前端模板虽然也是bootstrap拼接的,但是感觉太丑了.下面是部署系统部分功能截图. 用户管理系统: 简单CMDB系统: Ansible部署模块: 代码部署: 全局配置: 计划任务:

运维发布系统详谈

蓝绿发布概念:蓝绿部署是不停老版本,部署新版本然后进行测试.确认OK后将流量切到新版本,然后老版本同时也升级到新版本 特点:蓝绿部署无需停机,并且风险较小. 部署过程 部署版本 1 的应用(初始的状态)所有外部请求的流量都打到这个版本上. 部署版本 2 的应用版本 2 的代码与版本 1 不同(新功能.Bug修复等). 将流量从版本 1 切换到版本 2. 如版本 2 测试正常,就删除版本 1 正在使用的资源(例如实例),从此正式用版本 2.小结 从过程不难发现,在部署的过程中,我们的应用始终在线.

运维监控系统 PIGOSS BSM 为银行运维监控提供全力保障

IT运维服务在银行信息化建设和运行中的核心地位,而定量.实时的交易数据.事件和性能指标成为判断信息系统安全运行状态的主要依据.因此,进行银行业IT运维监控指标体系研究与构建,建立IT统一运维监控指标体系至关重要. 从信息系统期理论出发,信息系统大致分为规划与设计.开发与测试(或购买).实施.运维管理与持续改进五个阶段.而前三个阶段从时间角度看,只占整个周期的20%,其余时间基本上是对其进行运行维护.这就决定了IT运维服务在银行信息化建设和运行中的核心地位,而定量.实时的交易数据.事件和性能指标成

运维流程系统

一 图论概述 1 图的分类 1 无向图 图 graph由顶点和边组成,顶点的又穷非空集合为V,边的集合为E,记做G(V,E)顶点vertex,数据元素的集合,顶点的集合,又穷非空,边edge,数据元素关系的集合,顶点关系的集合,可以为空,边分为有向和无向两种 无向边记做(A,B),或者(B,A),使用小括号 无向图,记做undirected Graph 无向边的边构成的图,G=(V,E),V={A,B,C,D},E={(A,B),(A,C),(B,C),(B,D),(C,D)} 2 有向图 有向