• 更改paramiko 源码 记录命令实现堡垒机功能


    利用paramiko 下的demo可以很容易的实现记录客户在操作客户机时的命令,修改demosinteractive.py

     1 def posix_shell(chan):
     2     import select
     3     oldtty = termios.tcgetattr(sys.stdin)
     4     try:
     5         tty.setraw(sys.stdin.fileno())
     6         tty.setcbreak(sys.stdin.fileno())
     7         chan.settimeout(0.0)
     8 
     9 
    10         #这里就是主要改造的地方了
    11         cmd_list=[]
    #定义日志输出的位置
    12 log_file='/home/myshare/demos/test.log' 13 f=open(log_file,'rb+') 14 while True: 15 r, w, e = select.select([chan, sys.stdin], [], []) 16 17 if chan in r: 18 try: 19 x = u(chan.recv(1024)) 20 if len(x) == 0: 21 sys.stdout.write(' *** EOF ') 22 break 23 sys.stdout.write(x) 24 sys.stdout.flush() 25 except socket.timeout: 26 pass 27 if sys.stdin in r: 28 x = sys.stdin.read(1)
    #这个x每次敲击键盘就会记录一次,然后就将输入的内容交给输出的地方,这样才完成1个字符1个字符的显示过程。这个地方仔细想一下或者打印结X果就明白什么意思了
    #这里将字符串放入列表中,然后当用户敲回车的时候在将列表中的字符串拼接起来
    29 cmd_list.append(x) 30 if x == ' ': 31 cmd=''.join(cmd_list).replace(' ',' ') 32 f.write(cmd) 33 f.flush() 34 cmd_list=[] 35 if len(x) == 0: 36 break 37 chan.send(x) 38 39 finally: 40 termios.tcsetattr(sys.stdin, termios.TCSADRAIN, oldtty)

    此时方法

    [root@controller demos]# ./demo.py root@10.64.8.10  

  • 相关阅读:
    Azure Cognitive Service 访问优化
    Azure Managed Disk 共享不灵,EventGrid + LogicApp 来搞
    AZURE ACI -- 无服务器化容器解决方案
    Global Azure 与 China Azure 互联
    小总结
    存储过程及Comm.cs类的创建
    DataGrid1
    根据经纬度和半径计算经纬度范围
    CheckBoxJS选中与反选得到Value
    每天学一点-Jquery判断checkbox是否为选中状态
  • 原文地址:https://www.cnblogs.com/menkeyi/p/5829565.html
Copyright © 2020-2023  润新知