471,349 Members | 1,658 Online
Bytes | Software Development & Data Engineering Community
Post +

Home Posts Topics Members FAQ

Join Bytes to post your question to a community of 471,349 software developers and data experts.

supplying password to subprocess.call('rsync ...'), os.system('rsync ...')

Hi

I want to write a python script that runs rsync on a given directory
and host. I build the command line string, but when I try to run
subprocess.call(cmd), or p=subprocess.Popen(cmd, shell=True),or
os.system(cmd), I get prompted for my login password. I expected this,
but when I try to give my password, it's echoed back to the terminal
and the special characters in the password is (I think) getting
interpreted by the shell (zsh)

I can't ssh w/o supplying a password. That's the way the security is
set up here.

How do I use python to do this, or do I just have to write a zsh
script?

Thanks.

Oct 5 '07 #1
7 4518
On Oct 5, 10:33 am, "timw.google" <tjand...@yahoo.comwrote:
Hi

I want to write a python script that runs rsync on a given directory
and host. I build the command line string, but when I try to run
subprocess.call(cmd), or p=subprocess.Popen(cmd, shell=True),or
os.system(cmd), I get prompted for my login password. I expected this,
but when I try to give my password, it's echoed back to the terminal
and the special characters in the password is (I think) getting
interpreted by the shell (zsh)

I can't ssh w/o supplying a password. That's the way the security is
set up here.

How do I use python to do this, or do I just have to write a zsh
script?

Thanks.
I wrote a zsh script to do what I wanted, but I'd still like to know
how to do it in Python.

Oct 5 '07 #2
In message <11*********************@o80g2000hse.googlegroups. com>,
timw.google wrote:
I want to write a python script that runs rsync on a given directory
and host. I build the command line string, but when I try to run
subprocess.call(cmd), or p=subprocess.Popen(cmd, shell=True),or
os.system(cmd), I get prompted for my login password.
Why not set up a public/private SSH key pair between the accounts on the two
machines? Then you can get in without a password.

Oct 6 '07 #3
On 10/5/07, timw.google <tj******@yahoo.comwrote:
Hi

I want to write a python script that runs rsync on a given directory
and host. I build the command line string, but when I try to run
subprocess.call(cmd), or p=subprocess.Popen(cmd, shell=True),or
os.system(cmd), I get prompted for my login password. I expected this,
but when I try to give my password, it's echoed back to the terminal
and the special characters in the password is (I think) getting
interpreted by the shell (zsh)

I can't ssh w/o supplying a password. That's the way the security is
set up here.

How do I use python to do this, or do I just have to write a zsh
script?
SSH takes measures to ensure that passwords are typed from a keyboard
(pty) rather than being piped in automatically (stdin).

If SSH public key authentication (see ssh-keygen) doesn't work for
you, then try ssh agent (see, ssh-add), "sshpass", or something like
"empty-expect".

If you use ssh public keys, you can also setup the public key so that
only a specified command can be run, and that the public key can only
be used from a specific host. This is more secure. See this page for
more info: http://troy.jdmz.net/rsync/index.html

Otherwise you may need to do some pty-hackery in python to fool ssh
into thinking it's password is being entered from a keyboard and not a
script. However, you should try public key authentication (with rsync
as the only allowed command) first.

Another method is to setup an ssh service on the server (perhaps in
inetd). One disadvantage of this is that the rsync session (including
rsync login passwords) is not encrypted.
Oct 7 '07 #4
Typo.
Another method is to setup an ssh service on the server (perhaps in
Should be:
Another method is to setup an rsync service on the server (perhaps in
Oct 7 '07 #5
timw.google wrote:
Hi

I want to write a python script that runs rsync on a given directory
and host. I build the command line string, but when I try to run
subprocess.call(cmd), or p=subprocess.Popen(cmd, shell=True),or
os.system(cmd), I get prompted for my login password. I expected this,
but when I try to give my password, it's echoed back to the terminal
and the special characters in the password is (I think) getting
interpreted by the shell (zsh)

I can't ssh w/o supplying a password. That's the way the security is
set up here.

How do I use python to do this, or do I just have to write a zsh
script?
You need to use the pexpect module.
>
Thanks.
Oct 7 '07 #6
On 05 Oct 2007 16:23:50 GMT, Stargaming <st********@gmail.comwrote:
On Fri, 05 Oct 2007 08:37:05 -0700, timw.google wrote:
I can't ssh w/o supplying a password. That's the way the security is
set up here.

How do I use python to do this, or do I just have to write a zsh
script?

Thanks.
I wrote a zsh script to do what I wanted, but I'd still like to know how
to do it in Python.

`subprocess.Popen` has a keyword argument called `stdin` -- what takes
the password, I guess. Assigning `subprocess.PIPE` to it and using
`Popen.communicate` should do the trick.
SSH doesn't read passwords off of stdin. If you want to supply a
password to SSH, then you need to control a pty directly.

--
Nick
Oct 8 '07 #7
On Oct 7, 1:01 pm, Michael Torrie <torr...@chem.byu.eduwrote:
timw.google wrote:
Hi
I want to write a python script that runs rsync on a given directory
and host. I build the command line string, but when I try to run
subprocess.call(cmd), or p=subprocess.Popen(cmd, shell=True),or
os.system(cmd), I get prompted for my login password. I expected this,
but when I try to give my password, it's echoed back to the terminal
and the special characters in the password is (I think) getting
interpreted by the shell (zsh)
I can't ssh w/o supplying a password. That's the way the security is
set up here.
How do I use python to do this, or do I just have to write a zsh
script?

You need to use the pexpect module.
Thanks.
Thanks to all the suggestions on getting this to work w/ python. I'll
look into this more when I get the chance. I don't have root access,
so setting up some kind of server is out. I may not be able to try the
other suggestions either, as they have things locked down pretty tight
around here.

Oct 9 '07 #8

This discussion thread is closed

Replies have been disabled for this discussion.

Similar topics

36 posts views Thread by dcrespo | last post: by
3 posts views Thread by Mike Wiseley | last post: by
3 posts views Thread by Darren Dale | last post: by
5 posts views Thread by Vincent Pirez | last post: by
9 posts views Thread by Phoe6 | last post: by
2 posts views Thread by Rafael Giannetti Viotti | last post: by
2 posts views Thread by =?Utf-8?B?c3RhZ2VybGVp?= | last post: by
12 posts views Thread by bhunter | last post: by
reply views Thread by XIAOLAOHU | last post: by

By using Bytes.com and it's services, you agree to our Privacy Policy and Terms of Use.

To disable or enable advertisements and analytics tracking please visit the manage ads & tracking page.