469,270 Members | 1,153 Online
Bytes | Developer Community
New Post

Home Posts Topics Members FAQ

Post your question to a community of 469,270 developers. It's quick & easy.

Using python with SSH?

Hi,

I need to run a remote program from a server that I have access rights
to. I want to be able to do this from within in my python script and I
want to use ssh (or anything else that will work). However, doing
something like:

ssh -l user host "/path/to/program"

prompts for a password and I don't know how to supply one via a python
script. Is there an easy way out? Can I log onto to the other machine
via ssh somehow? Does a python script support this? Thanks!

Steve

Jul 18 '05 #1
6 39793
Steve <nospam@nopes> writes:
ssh -l user host "/path/to/program"

prompts for a password and I don't know how to supply one via a python
script. Is there an easy way out? Can I log onto to the other machine
via ssh somehow? Does a python script support this? Thanks!


The simplest way is to set up ssh at both ends with RSA authentication
and have a private key on the local machine. That gets rid of the
need for a password, while still keeping the connection secure, as
long as the local machine is secure.
Jul 18 '05 #2
Steve <nospam@nopes> writes:
ssh -l user host "/path/to/program"

prompts for a password and I don't know how to supply one via a python
script. Is there an easy way out? Can I log onto to the other machine via
ssh somehow? Does a python script support this? Thanks!


Try something like this:

import os

ssh_pipe = os.popen("ssh -l user path")
ssh_pipe.write(password)
ssh_pipe.write("\n")
ssh_pipe.flush()
ssh_pipe.close()

hope this helps

--
Lawrence "Rhymes" Oluyede
http://loluyede.blogspot.com
Jul 18 '05 #3
On Thu, Dec 18, 2003 at 12:08:43AM +0100, Lawrence Oluyede wrote:
Steve <nospam@nopes> writes:
ssh -l user host "/path/to/program"

prompts for a password and I don't know how to supply one via a python
script. Is there an easy way out? Can I log onto to the other machine via
ssh somehow? Does a python script support this? Thanks!


You could open ssh in a pty, or you could use a Python module that speaks
the SSH protocol, thus obviating the requirement to call out to the ssh
command line program.

A couple choices for such modules:

http:/www.twistedmatrix.com/

http://www.lag.net/~robey/secsh/
Try something like this:

import os

ssh_pipe = os.popen("ssh -l user path")
ssh_pipe.write(password)
ssh_pipe.write("\n")
ssh_pipe.flush()
ssh_pipe.close()

hope this helps


It does not. ssh won't accept a password from standard input, it requires
it to be entered into the terminal.

Jp

Jul 18 '05 #4
Jp Calderone <ex*****@intarweb.us> writes:
It does not. ssh won't accept a password from standard input, it requires
it to be entered into the terminal.


Ah ok, i thought it did.

--
Lawrence "Rhymes" Oluyede
http://loluyede.blogspot.com
Jul 18 '05 #5
On Wed, 2003-12-17 at 23:00, Steve wrote:
Hi,

I need to run a remote program from a server that I have access rights
to. I want to be able to do this from within in my python script and I
want to use ssh (or anything else that will work). However, doing
something like:

ssh -l user host "/path/to/program"

prompts for a password and I don't know how to supply one via a python
script. Is there an easy way out? Can I log onto to the other machine
via ssh somehow? Does a python script support this? Thanks!

Steve


Steve,
You don't say if you are running on Windows or not but this is a ssh
wrapper I use that uses the pexpect library...:
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")
ssh.close()


--
Martin Franklin <mf********@gatwick.westerngeco.slb.com>
Jul 18 '05 #6
On Thu, 18 Dec 2003 10:06:02 +0000, Martin Franklin <mf********@gatwick.westerngeco.slb.com> wrote:
On Wed, 2003-12-17 at 23:00, Steve wrote:
Hi,

I need to run a remote program from a server that I have access rights
to. I want to be able to do this from within in my python script and I
want to use ssh (or anything else that will work). However, doing
something like:

ssh -l user host "/path/to/program"

prompts for a password and I don't know how to supply one via a python
script. Is there an easy way out? Can I log onto to the other machine


If your sysadmin allows it, you can configure ssh to connect to another
machine without prompting for a password, at least at Linux systems.
Albert
--
Unlike popular belief, the .doc format is not an open publically available format.
Jul 18 '05 #7

This discussion thread is closed

Replies have been disabled for this discussion.

Similar topics

4 posts views Thread by The_Incubator | last post: by
8 posts views Thread by Sridhar R | last post: by
29 posts views Thread by 63q2o4i02 | last post: by
9 posts views Thread by dominiquevalentine | last post: by
14 posts views Thread by Nathan Pinno | last post: by
53 posts views Thread by Vicent Giner | last post: by
1 post views Thread by CARIGAR | last post: by
reply views Thread by zhoujie | last post: by
By using this site, you agree to our Privacy Policy and Terms of Use.