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. 【bzoj3439】kpm的mc密码 题解

    题目大意: 有n个字符串,编号为1~n,求每一个字符串在其他字符串中以它为后缀的字符串中编号第k小的字符串的编号. 思路: 将字符串倒过来建Trie,记录每个结尾节点的编号(可能会有重复,所以开一个v ...

  2. C#图片处理---基础

    简单的图片剪裁 using System; using System.Drawing; using System.Drawing.Drawing2D; using System.IO; namespa ...

  3. C#_生成HTML

    #region 生成静态页 /// <summary> /// 生成静态页 /// </summary> /// <param name="URL"& ...

  4. JS相关环境搭建:Nodejs、karma测试框架、jsDuck、Express

    第一章:压缩js(nodejs,uglify) 第一步:安装nodejs环境 直接下载http://www.nodejs.org/download/ 下载完成后直接下一步下一步即可,完了我们就具有no ...

  5. ArcGIS几种数据格式

    ArcGIS几种数据格式 ArcInfo常用以下格式的数据:shp.Coverage..Raster CAD和Geodatabase.各种数据的组织形式不一样,其中shp.Coverage.Raste ...

  6. 浅析Spring中的注解

    Spring的配置,通常有两种:使用配置文件和注解.那么Spring如何知道各个Bean或者Service.Controller以及Bean中各类属性之间的关系呢?答案肯定是在定义各个Java文件的时 ...

  7. java web(一) 使用sql标签库+tomcat+mysql手动创建一个jsp练习总结

    2016-09-0111:06:53                                     使用sql标签库+tomcat+mysql手动创建一个jsp 1. 1.1安装tomcat ...

  8. 读《深入php面向对象、模式与实践》有感(二)

    书中关于设计模式的介绍很详细. 一.单例模式 作者建了一个preferences类来解释什么是单例模式.这个preferences类并非我第一次见到,在android中也有这个类,不过以前都是只管用即 ...

  9. #1045 - Access denied for user 'root'@'localhost' (using password: NO)

    解决办法 打开 phpmyadmin里的config.inc.php文件 $cfg['Servers'][$i][ 'host'] = 'localhost';$cfg['Servers'][$i][ ...

  10. ZK 代码自动提示

    1.设置xsd 打开eclipse,Window-Preference,进行如下设置: 2.创建zul文件 (1)打开File—New—Other窗口,新建XML File文件: (2)选择新建文件所 ...