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. POJ 1127 Jack Straws(计算几何)

    题目链接 抄的模版,居然1Y了.就是简单的线段相交+并查集. #include <iostream> #include <cstring> #include <cstdi ...

  2. Android --ToggleButton的使用

    1. 效果图

  3. BZOJ4513: [Sdoi2016]储能表

    Description 有一个 n 行 m 列的表格,行从 0 到 n−1 编号,列从 0 到 m−1 编号.每个格子都储存着能量.最初,第 i 行第 j 列的格子储存着 (i xor j) 点能量. ...

  4. OSG+VS2010+win7环境搭建---OsgEarth编译

    OSG+VS2010+win7环境搭建---OsgEarth编译 转:http://www.cnblogs.com/hnfxs/p/3161261.html Win7下 osg+vs2010环境搭建 ...

  5. AE唯一值符号化的流程以及过程

    唯一值符号化的流程以及过程(转)   一.获取ServerStyle库中的符号       Style符号库在ArcGIS Engine开发中对应的是ServerStyle符号库,可以通过专门的转换程 ...

  6. 使用ftp软件上传下载php文件时换行丢失bug

    正 文:   在使用ftp软件上传下载php源文件时,我们偶尔会发现在本地windows下notepad++编辑器写好的php文件,在使用ftp上传到linux服务器后,php文件的换行符全部丢失了, ...

  7. ACM Steps 2.1.4

    Largest prime factor   Time Limit: 5000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Othe ...

  8. HTML5初学总结

    基本标签的使用 <!doctype html> <!--这是HTML5的申明,大小写都可以--> <html> <head> <title> ...

  9. jQuery上定义插件并重设插件构造函数

    插件alert的全部代码,每个插件都定义在如下类似的作用域中: +function ($) { 'use strict'; // ALERT CLASS DEFINITION // ========= ...

  10. JSP页面转向方式

    1.RequestDispatcher.forward() 是在服务器端起作用,当使用forward()时,Servlet engine传递HTTP请求从当前的Servlet or JSP到另外一个S ...