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

Discussion in 'Python' started by timw.google, Oct 5, 2007.

  1. timw.google

    timw.google Guest

    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.
    timw.google, Oct 5, 2007
    #1
    1. Advertising

  2. timw.google

    timw.google Guest

    On Oct 5, 10:33 am, "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?
    >
    > Thanks.


    I wrote a zsh script to do what I wanted, but I'd still like to know
    how to do it in Python.
    timw.google, Oct 5, 2007
    #2
    1. Advertising

  3. timw.google

    Stargaming Guest

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

    On Fri, 05 Oct 2007 08:37:05 -0700, timw.google wrote:

    > On Oct 5, 10:33 am, "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?
    >>
    >> 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.

    Check the documentation at http://docs.python.org/lib/module-
    subprocess.html for details.

    Cheers,
    Stargaming
    Stargaming, Oct 5, 2007
    #3
  4. In message <>,
    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.
    Lawrence D'Oliveiro, Oct 6, 2007
    #4
  5. timw.google

    David Guest

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

    On 10/5/07, 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?
    >


    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.
    David, Oct 7, 2007
    #5
  6. timw.google

    David Guest

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

    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
    David, Oct 7, 2007
    #6
  7. Re: supplying password to subprocess.call('rsync ...'),os.system('rsync ...')

    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.
    >
    Michael Torrie, Oct 7, 2007
    #7
  8. Re: supplying password to subprocess.call('rsync ...'),os.system('rsync ...')

    On 05 Oct 2007 16:23:50 GMT, Stargaming <> wrote:
    > 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
    Nicholas Bastin, Oct 8, 2007
    #8
  9. timw.google

    timw.google Guest

    On Oct 7, 1:01 pm, Michael Torrie <> wrote:
    > 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.
    timw.google, Oct 9, 2007
    #9
    1. Advertising

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

It takes just 2 minutes to sign up (and it's free!). Just click the sign up button to choose a username and then you can ask your own questions on the forum.
Similar Threads
  1. William Dode

    subprocess freeze with rsync on windows

    William Dode, Apr 7, 2006, in forum: Python
    Replies:
    0
    Views:
    361
    William Dode
    Apr 7, 2006
  2. David Pratt
    Replies:
    0
    Views:
    249
    David Pratt
    Apr 7, 2008
  3. David Pratt
    Replies:
    0
    Views:
    390
    David Pratt
    Apr 7, 2008
  4. AAaron123
    Replies:
    2
    Views:
    2,090
    AAaron123
    Jan 16, 2009
  5. AAaron123
    Replies:
    1
    Views:
    1,310
    Oriane
    Jan 16, 2009
Loading...

Share This Page