How can I provide a SSH password to SVN on the command line?

33,213

Solution 1

svn co svn+ssh://username:[email protected]/home/svn/shproject

Solution 2

Given that you're using SSH, the preferred way is to use a public key for authorization, which saves the need of a password completely.

A guide for creating and installing the keys can be found here.

Solution 3

Instead of using a password you might want to have a look at a private/public key pair and have ssh use that. most linux distributions come with easy to use commands to create such a pair. this would however require access ti the server side (once) to deposit the public key file in your user's ~/.ssh/authorized_keys file.

Solution 4

Well, I do want to enter a password - I don't like relying on my password being saved somewhere; however, I do want to enter it once per set of svn+ssh commands; and often, you just want to do one svn checkout - and have to enter tons of passwords anyways. It is in such a case I'd like to type a password only once.

So, only answers by @Boinst and @Marius were relevant for my use case; unfortunately, they didn't help, as I couldn't get them to work. I wonder if the post authors themselves tried the commands out before posting them, as now I cannot imagine how they could work - here's a test I did locally on my Ubuntu 10.04 PC (and I break with Ctrl-C, each time I see the password prompt appear):

$ svn --version | head -1
svn, version 1.6.6 (r40053)

$ cd /tmp
$ svnadmin create myrepo
$ read -p 'ssh [email protected]? ' PASS
ssh [email protected]? [type _PASSWORD_, press ENTER]

## trying first with https://superuser.com/a/71479/39752 
# (specify in URL user:pass separated by colon)

## plain ssh - asks for password anyway:

$ ssh myself:[email protected]
myself:[email protected]'s password: ^C

# svn - with just username, as expected:

$ svn co svn+ssh://[email protected]/tmp/myrepo myrepo-wc
[email protected]'s password: ^C
svn: Network connection closed unexpectedly

# svn - with password added to URL, asks for password anyway:

$ svn co svn+ssh://myself:[email protected]/tmp/myrepo myrepo-wc
myself:[email protected]'s password: ^C
svn: Network connection closed unexpectedly

# trying then with https://superuser.com/a/380426/39752, https://superuser.com/a/327822/39752
# (--non-interactive and --username/--password on command line)

# svn - asks for password anyway:

$ svn co svn+ssh://[email protected]/tmp/myrepo --non-interactive --trust-server-cert --username myself --password $PASS --no-auth-cache
[email protected]'s password: ^C
svn: Network connection closed unexpectedly

As far as --username/--password on svn command line is concerned - that doesn't matter with svn+ssh, because it's ssh asking, not svn:

svn - Subversion ignoring "--password" and "--username" options - Stack Overflow

The prompt you're getting doesn't look like Subversion asking you for a password, it looks like ssh asking for a password.

Additionally, as the log shows, ssh itself doesn't accept "username:password@..." in the URL - and so neither does svn. Why it is acceptable to use only username in the URL in svn, is probably explained in ~/.subversion/config:

### (If the URL includes a username, then the hostname will be
### passed to the tunnel agent as @.)

Notice nothing is said about <user>:<pass>@<hostname>.

Now, thanks to the page Subversion over SVN+SSH on Debian, I finally realized there is a SVN_SSH environment variable used in ~/.subversion/config for the (I guess) ssh tunnel; and that finally opens up the possibility to use the program sshpass to handle the password in such a one-way manner:

$ SSHPASS=$PASS SVN_SSH="sshpass -e ssh" svn co svn+ssh://[email protected]/tmp/myrepo myrepo-wc
Checked out revision 0.

Well, at least I'm glad I finally found a solution that works for me - hope this helps someone else, too,
Cheers!

Solution 5

svn co svn+ssh://10.106.191.164/home/svn/shproject --non-interactive --trust-server-cert --username <username> --password <password> --no-auth-cache
Share:
33,213

Related videos on Youtube

Alex
Author by

Alex

Updated on September 17, 2022

Comments

  • Alex
    Alex over 1 year

    In my case, I want to do a SVN checkout:

    svn co svn+ssh://10.106.191.164/home/svn/shproject
    

    However, I want to have the password in that one line, so that it doesn't pop up.

    • Admin
      Admin almost 10 years
      Just a quick warning - your username and password will be exposed to ANYONE with access to that machine. Just a simple "ps -elf" command will show the full command line. In general this is not a good idea security-wise, and why svn and tools like it prompt for passwords. Not that you can't do it if you control who has access to the system, just don't want people to think they should do this in general.
  • briealeida
    briealeida over 14 years
    +1 for answering the question and not just providing alternatives (worthy though they may be).
  • tetram
    tetram about 11 years
    @briealeida - I just wish it worked: according to the test in my post below, it seems it does not work, as a password prompt appears anyways; the same post contains a solution with sshpass (which does work for me).
  • Jonny
    Jonny over 8 years
    As said above, this doesn't actually work.
  • Admin
    Admin over 8 years
    "The permissions of ~/.ssh on the server should be 700. The file ~/.ssh/authorized_keys (on the server) is supposed to have a mode of 600. The permissions of the (private) key on the client-side should be 600." askubuntu.com/a/46425
  • Jonny
    Jonny over 8 years
    Expanded: it would likely work as long as ssh does not ask for a password, which it would in most cases.