Welcome, guest | Sign In | My Account | Store | Cart
# auto_telnet.py - remote control via telnet
import os, sys, string, telnetlib
from getpass import getpass

class AutoTelnet:
   
def __init__(self, user_list, cmd_list, **kw):
       
self.host = kw.get('host', 'localhost')
       
self.timeout = kw.get('timeout', 600)
       
self.command_prompt = kw.get('command_prompt', "$ ")
       
self.passwd = {}
       
for user in user_list:
           
self.passwd[user] = getpass("Enter user '%s' password: " % user)
       
self.telnet = telnetlib.Telnet()
       
for user in user_list:
           
self.telnet.open(self.host)
            ok
= self.action(user, cmd_list)
           
if not ok:
               
print "Unable to process:", user
           
self.telnet.close()

   
def action(self, user, cmd_list):
        t
= self.telnet
        t
.write("\n")
        login_prompt
= "login: "
        response
= t.read_until(login_prompt, 5)
       
if string.count(response, login_prompt):
           
print response
       
else:
           
return 0
        password_prompt
= "Password:"
        t
.write("%s\n" % user)
        response
= t.read_until(password_prompt, 3)
       
if string.count(response, password_prompt):
           
print response
       
else:
           
return 0
        t
.write("%s\n" % self.passwd[user])
        response
= t.read_until(self.command_prompt, 5)
       
if not string.count(response, self.command_prompt):
           
return 0
       
for cmd in cmd_list:
            t
.write("%s\n" % cmd)
            response
= t.read_until(self.command_prompt, self.timeout)
           
if not string.count(response, self.command_prompt):
               
return 0
           
print response
       
return 1

if __name__ == '__main__':
    basename
= os.path.splitext(os.path.basename(sys.argv[0]))[0]
    logname
= os.environ.get("LOGNAME", os.environ.get("USERNAME"))
    host
= 'localhost'
   
import getopt
    optlist
, user_list = getopt.getopt(sys.argv[1:], 'c:f:h:')
    usage
= """
usage: %s [-h host] [-f cmdfile] [-c "
command"] user1 user2 ...
    -c  command
    -f  command file
    -h  host  (default: '%s')

Example:  %s -c "
echo $HOME" %s
"""
% (basename, host, basename, logname)
   
if len(sys.argv) < 2:
       
print usage
        sys
.exit(1)
    cmd_list
= []
   
for (opt, optarg) in optlist:
       
if opt == '-f':
           
for r in open(optarg).readlines():
               
if string.rstrip(r):
                    cmd_list
.append(r)
       
elif opt == '-c':
            command
= optarg
           
if command[0] == '"' and command[-1] == '"':
                command
= command[1:-1]
            cmd_list
.append(command)
       
elif opt == '-h':
            host
= optarg
    autoTelnet
= AutoTelnet(user_list, cmd_list, host=host)

History