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
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.
> 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
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
> 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.
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 <mfran...@gatwick.westerngeco.slb.com>
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.