温馨提示×

温馨提示×

您好,登录后才能下订单哦!

密码登录×
登录注册×
其他方式登录
点击 登录注册 即表示同意《亿速云用户服务条款》

paramiko intertive.py文件简单修改记录用户输入命令 v1

发布时间:2020-10-10 01:12:01 来源:网络 阅读:570 作者:lvnian2009 栏目:移动开发




# Copyright (C) 2003-2007  Robey Pointer <robeypointer@gmail.com> # # 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 from paramiko.py3compat import u import time # windows does not have termios... try:     import termios     import tty     has_termios = True except ImportError:     has_termios = False def interactive_shell(chan):     if has_termios:         posix_shell(chan)     else:         windows_shell(chan) def posix_shell(chan):     import select          oldtty = termios.tcgetattr(sys.stdin)     try:         tty.setraw(sys.stdin.fileno())         tty.setcbreak(sys.stdin.fileno())         chan.settimeout(0.0)         recode = []         cmd = ''         log_file = "audit_log_%s.log" % time.strftime('%Y_%m_%d')         f = file(log_file,'ab+')         while True:             r, w, e = select.select([chan, sys.stdin], [], [])             if chan in r:                 try:                     x = u(chan.recv(1024))                     if len(x) == 0:                         sys.stdout.write('\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)                 cmd += x                 if x == '\r':                     #print "cmd===>",cmd                     cmd_time = time.strftime('%Y-%m-%d-%H-%M-%S')                     log_line = "username:192.169.10.12:root:%s       %s \n     " %(cmd_time,cmd)                     f.write(log_line)           print log_line                     cmd = ''                 if len(x) == 0:                     break                 chan.send(x)         else:             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



向AI问一下细节

免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。

AI