python的paramiko源码修改了一下,写了个操作命令的日志审计,但是记录的日志中也将backspace删除键记录成^H这个了,于是改了一下代码,用字符串的特性。

字符串具有列表的特性

>>> a="hello world"
>>> a[:-1]
'hello worl'

转义符

转义字符
\(在行尾时) 续行符 \\ 反斜杠符号
\' 单引号
\" 双引号
\a 响铃
\b 退格(Backspace)
\e 转义
\000 空
\n 换行
\v 纵向制表符
\t 横向制表符
\r 回车
\f 换页
\oyy 八进制数yy代表的字符,例如:\o12代表换行
\xyy 十进制数yy代表的字符,例如:\x0a代表换行
\other 其它的字符以普通格式输出

代码部分

            if sys.stdin in r:
x = sys.stdin.read(1)
if x == '\b':
cmd=cmd[:-1]
else:
cmd+=x
#records.append(x)
if x == '\r':
#print "your input is:",cmd
log_line = "-login_user:%s\t|host_addr:%s\t|%s|HISTORY_CMD: %s \n" % (username,hostname,time.strftime("%Y_%m_%d %H:%M:%S"),cmd)
cmd = ''
log_file.write(log_line)

操作演示 123456789 删除3 6 9键入三个键  如下标红

root@python:~/baolei# sh remote.sh
########################################################
: [haproxy] w1.dev.haproxy.org 192.168.0.105
######################################################## before choose items will be sleep a monent Please choose ip of top:
Please input your username:root
root 192.168.0.105
192.168.0.105 root
username:root
*** WARNING: Unknown host key!
Auth by (p)assword, (r)sa key, or (d)ss key? [p]
Password for root@192.168.0.105:
*** Here we go! Last login: Thu Feb :: from 192.168.0.106
/data/x/tools/team/env/alias.env
fatal: Not a git repository (or any of the parent directories): .git
/data/x/tools/team/env/git-completion.env
ansible-direc:~ #
-bash: : command not found
ansible-direc:~ # exit
logout *** EOF
root@python:~/baolei# vim /tmp/root/192.168..105_audit_log_2016_02_27.log
root@python:~/baolei# vim /tmp/root/192.168..105_audit_log_2016_02_27.log
root@python:~/baolei# vim /tmp/liujianzuo/192.168..102_audit_log_2016_02_27.log
root@python:~/baolei# vim interactive.py
root@python:~/baolei# tail /tmp/root/192.168..105_audit_log_2016_02_27.log
login_user:root |host_addr:192.168.0.105 |2016_02_27 ::|HISTORY_CMD: ls
login_user:root |host_addr:192.168.0.105 |2016_02_27 ::|HISTORY_CMD: exit
login_user:root |host_addr:192.168.0.105 |2016_02_27 ::|HISTORY_CMD: ls
login_user:root |host_addr:192.168.0.105 |2016_02_27 ::|HISTORY_CMD: lll
login_user:root |host_addr:192.168.0.105 |2016_02_27 ::|HISTORY_CMD: sd
login_user:root |host_addr:192.168.0.105 |2016_02_27 ::|HISTORY_CMD: exit
login_user:root |host_addr:192.168.0.105 |2016_02_27 ::|HISTORY_CMD:
login_user:root |host_addr:192.168.0.105 |2016_02_27 ::|HISTORY_CMD: exit
login_user:root |host_addr:192.168.0.105 |2016_02_27 ::|HISTORY_CMD:
login_user:root |host_addr:192.168.0.105 |2016_02_27 ::|HISTORY_CMD: exit

 shell 变量传入python脚本,修改后的源码脚本就不粘贴了。

root@python:~/baolei# cat remote.sh
#!/bin/sh
#created by liujianzuo
list(){
#cd /home/liujianzuo/server/scripts
echo "\033[33;1m########################################################\033[0m"
awk '{printf "\033[35;1m%s:\t[%-4s]\t%20s\t%s\033[0m\n",NR,$2,$1,$NF}' remote_ip.log
echo "\033[33;1m########################################################\033[0m\n"
}
wai_t(){
echo "\033[32;1m before choose items will be sleep a monent\033[0m\n"
# for i in {..};do sleep 0.6 && echo -e "\033[35;1m..........................\033[0m";done
#read -p "Please choose ip of top:" num
while true
do
if [ -z $num ] && [ -z $username ];then
read -p "Please choose ip of top:" num
read -p "Please input your username:" username
continue
else
break
fi
done
IP=`awk -v ip=$num 'NR == ip{printf "%s:\t[%10s]\t%-20s\t%s\n",NR,$2,$1,$NF}' remote_ip.log|awk '{print $NF}'`
}
list
wai_t
python=`which python`
echo $username $IP
python demo.py $IP $username

还有几个bug要修改:

  终端内切换ip,审计日志的ip要相应变化。

  登陆服务器密码失败一次不退出。

python的paramiko源码修改了一下,写了个操作命令的日志审计 bug修改的更多相关文章

  1. Python解析器源码加密系列之(二):一次使用标准c的FILE*访问内存块的尝试

    摘要:由于近期打算修改Python解释器以实现pyc文件的加密/解密,出于保密的要求,解密之后的数据只能放在内存中,不能写入到文件中.但是后续的解析pyc文件的代码又只能接受FILE*作为入参,所以就 ...

  2. (3.10)mysql基础深入——mysqld 服务器与客户端连接过程 源码分析【待写】

    (3.10)mysql基础深入——mysqld 服务器与客户端连接过程 源码分析[待写]

  3. 真想用c#开发个 wp五笔输入法。。。奈何网上资料太少,源码都是c++写的。求大神指点!!!

    真想用c#开发个 wp五笔输入法...奈何网上资料太少,源码都是c++写的.求大神指点!!!!

  4. Python 3.5源码编译安装

    系统环境:CentOS 6.8-Minimal 安装Python依赖包: [root@Python src]# yum install zlib-devel bzip2-devel openssl-d ...

  5. 读懂掌握 Python logging 模块源码 (附带一些 example)

    搜了一下自己的 Blog 一直缺乏一篇 Python logging 模块的深度使用的文章.其实这个模块非常常用,也有非常多的滥用.所以看看源码来详细记录一篇属于 logging 模块的文章. 整个 ...

  6. 【Python】Webpy 源码学习

    那么webpy是什么呢? 阅读它的源码我们又能学到什么呢? 简单说webpy就是一个开源的web应用框架(官方首页:http://webpy.org/) 它的源代码非常整洁精干,学习它一方面可以让我们 ...

  7. Python 进阶之源码分析:如何将一个类方法变为多个方法?

    前一篇文章<Python 中如何实现参数化测试?>中,我提到了在 Python 中实现参数化测试的几个库,并留下一个问题: 它们是如何做到把一个方法变成多个方法,并且将每个方法与相应的参数 ...

  8. 编译python(cpython)的源码及其用途

    获取python的源码 3.x及最新版本的源码:https://github.com/python/cpython python2.7分支的源码:https://github.com/python/c ...

  9. Python:Sqlmap源码精读之解析xml

    XML <?xml version="1.0" encoding="UTF-8"?> <root> <!-- MySQL --&g ...

随机推荐

  1. java线程详解

    Java线程:概念与原理 一.操作系统中线程和进程的概念 现在的操作系统是多任务操作系统.多线程是实现多任务的一种方式. 进程是指一个内存中运行的应用程序,每个进程都有自己独立的一块内存空间,一个进程 ...

  2. UVa 10870 & 矩阵快速幂

    题意: 求一个递推式(不好怎么概括..)的函数的值. 即 f(n)=a1f(n-1)+a2f(n-2)+...+adf(n-d); SOL: 根据矩阵乘法的定义我们可以很容易地构造出矩阵,每次乘法即可 ...

  3. BZOJ 1013 & 高斯消元

    题意: 告诉你一个K维球体球面上的K+1个点问球心坐标. sol: 乍一看还以为是K维的二分答案然后判断距离...真是傻逼了...你看乱七八糟的题目做多了然后就会忘记最有用的基本计算... 我们可以看 ...

  4. QWord2vec:word2vec移植版+GUI

    序 Word2Vec原生是不支持Windows的,索性就用Qt移植了一下. 大概做了下面几件事. ①替换LinuxAPI的pthread为QThread. ②取消了posix_memalign(),内 ...

  5. HDU 2836 (离散化DP+区间优化)

    Reference:http://www.cnblogs.com/wuyiqi/archive/2012/03/28/2420916.html 题目链接: http://acm.hdu.edu.cn/ ...

  6. HDU 3074 (线段树+模P乘法)

    题目链接: http://acm.hdu.edu.cn/showproblem.php?pid=3074 题目大意:单点更新.维护序列乘法.mod 1000000007. 解题思路: 10000000 ...

  7. [Java] 利用LinkedHashMap来实现LRU Cache

    http://www.acmerblog.com/leetcode-lru-cache-lru-5745.html https://oj.leetcode.com/discuss/1188/java- ...

  8. Maven的第一个小程序

    这里是介绍关于maven的第一个小程序 关于maven的安装 : Install Maven in your computer 先看看目录结构: 这是本来的项目目录结构,由于maven有自己的目录结构 ...

  9. Maven_pom.xml介绍

    Maven的pom.xml介绍 6.1     简介 pom.xml文件是Maven进行工作的主要配置文件.在这个文件中我们可以配置Maven项目的groupId.artifactId和version ...

  10. Redis在windows下的安装使用

    下载的windows版本是redis-2.0.2,解压到D盘下: D:\redis-2.0.2 启动Redis服务(conf文件指定配置文件,若不指定则默认): D:\redis-2.0.2>r ...