any telnetlib equivalent in Python for rlogin?

W

walala

Dear all,

I recently came across a Python program which used "telnetlib" to automate
things in the several unix machines in our local networks; I attached the
script as follows;

I wonder if it is possible to have the equivlent libary for "rlogin" in
Python? Because our local networks support only SSH or RLOGIN. This script
used Telnet so it could not be used in our local networks;

Considering I am quite new to Python, is there any way that I can easily
change this program to be used on "rlogin"? For example, is there a library
called "RLOGIN" that I can simply use self.tn = tn =
rloginlib.Rlogin(self.host), or something like that?

Thanks a lot,

-Walala

----------------------------------------------------------
import telnetlib
self.tn = tn = telnetlib.Telnet(self.host)
tn.read_until("login: ")
tn.write(self.username + "\n")
tn.read_until("Password: ")
tn.write(self.password + "\n")

# XXX: how to know whether login is successful?
tn.read_until(self.username)
#
 
M

Martin Franklin

Dear all,

I recently came across a Python program which used "telnetlib" to automate
things in the several unix machines in our local networks; I attached the
script as follows;

I wonder if it is possible to have the equivlent libary for "rlogin" in
Python? Because our local networks support only SSH or RLOGIN. This script
used Telnet so it could not be used in our local networks;

Considering I am quite new to Python, is there any way that I can easily
change this program to be used on "rlogin"? For example, is there a library
called "RLOGIN" that I can simply use self.tn = tn =
rloginlib.Rlogin(self.host), or something like that?

Thanks a lot,

-Walala


Walala,

There is no standard ssh or rlogin module in the python standard library
I guess twisted has both (a quick google for twisted python could tell
you).

You don't mention what platform you are running on but if it's a *nix
then you could use pexpect (again google will tell you where to find
pexpect) to 'simulate' ssh like so:-


import pexpect
import sys
import re
import os

PROMPT = "\$|\%|\>"


class SSH:
def __init__(self, user, password, host):
self.child = pexpect.spawn("ssh %s@%s"%(user, host))
i = self.child.expect(['assword:', r"yes/no"], timeout=120)
if i==0:
self.child.sendline(password)
elif i==1:
self.child.sendline("yes")
self.child.expect("assword:", timeout=120)
self.child.sendline(password)
self.child.expect(PROMPT)


def command(self, command):
"""send a command and return the response"""
self.child.sendline(command)
self.child.expect(PROMPT)
response = self.child.before
return response

def close(self):
"""close the connection"""
self.child.close()


if __name__=="__main__":
import getpass
password = getpass.getpass("Password: ")
ssh = SSH("RemoteUsername", password, "RemoteHost")
print ssh.command("pwd")



Cheers
Martin
 
F

Francis Avila

walala said:
Dear all,
Considering I am quite new to Python, is there any way that I can easily
change this program to be used on "rlogin"? For example, is there a library
called "RLOGIN" that I can simply use self.tn = tn =
rloginlib.Rlogin(self.host), or something like that?

Yes: replicate the public interface of telnetlib, and use the rlogin
protocol instead of the telnet protocol behind-the-curtain. Much of the
telnetlib public interface will be redundant, because these protocols don't
have many escape or control characters, and hence do very little data
cooking.

As for the behind-the-covers implementation, you can either go expect-like
and communicate with an rlogin/ssh subshell through os.popen2/3, or
reimplement an rlogin/ssh client in Python. Reimplementing the rlogin
client looks pretty easy--its a simple protocol (rfc1282). Reimplementing
ssh is _far_ more ambitious--I think communicating with a subshell is
probably a better idea for that.

It seems odd to me that your network supports rlogin but not telnet--rlogin
is iirc far more insecure because of the .rhosts nonsense. I think ssh is
certainly a better choice here, even though using it will be messier.
 

Ask a Question

Want to reply to this thread or ask your own question?

You'll need to choose a username for the site, which only take a couple of moments. After that, you can post your question and our members will help you out.

Ask a Question

Members online

Forum statistics

Threads
474,432
Messages
2,571,680
Members
48,796
Latest member
Greg L.

Latest Threads

Top