Was Re: need wrapper for ssh/scp
Andrew McDowell
drew.mcdowell at msfc.nasa.gov
Thu Apr 6 17:19:32 EDT 2000
Thomas Wouters <thomas at xs4all.net> wrote:
>ssh/scp (and indeed most programs that ask for a password) talk directly to
>the tty when getting sensitive information (like the password or the
>passphrase.) You can catch this by using the 'pty' module. You probably
want
>to pty.fork(), and then redirect stdin/stdout, and fiddle with the terminal
>on both ends to easily pass the passphrase... You face the usual deadlock
>problems though, when both ends of the pipe are waiting for the other to
>send data.
Umm....Help? :)
I also working with ssh to execute some remote commands on different
servers. I'd previously been hobbling together this strange idea of
generating an Expect script in python then running it. (*bleh*) So once I
saw was clued onto the pty module I started playing with it. Well...I'm
either severely confused, or something isn't working properly. Could anyone
offer some help?
Here's a sample of how I'm attempting it now:
#!/usr/local/bin/python
import os, string, pty, time, signal
def remote_ex(hostname, password):
pid, fd = pty.fork()
if pid == 0:
os.execv("/usr/local/bin/ssh",[hostname])
else:
time.sleep(2)
print "Child says %s" % string.strip(os.read(fd,1024))
print "Child took %d password bytes." % os.write(fd, password)
time.sleep(4) #being over cautious
print "Child took %d command bytes" % os.write(fd, "echo $HOST >
ptyhost.txt")
print "Child took %d exit bytes." % os.write(fd, "exit")
os.kill(pid, signal.SIGKILL)
return
#=-=-=-=-=-Main=-=-=-=-=-=-=#
def main():
myhost = string.strip(raw_input("Enter a host:"))
mypass = string.strip(raw_input("Enter your Password:"))
remote_ex(myhost, mypass)
##########################
if __name__ == "__main__":
main()
More information about the Python-list
mailing list