This file describes how to use the sshd "command" directive to set up
svn+ssh with any or all of the following properties:

  (1) Specify a full path to the svnserve binary
  (2) Specify a repository root as one can with the svnserve daemon
  (3) Avoid giving full shell access to an svn user
  (4) Use a single Unix account for multiple svn users

This file will assume that the server is using openssh on a Unix-like
host.  The same tricks may work for other server setups, but changes
may need to be made to the details.

These tricks require that you use public-key authentication; they will
not work with password authentication.  These tricks also assume that
the client's key-pair is used only for access to svnserve; if you want
to retain general shell access to the host, create a second, dedicated
key-pair for Subversion access and (assuming a Unix client) set the
environment variable SVN_SSH to "ssh -i /path/to/private/key/file --".

The basic idea
--------------

To set up public key authentication on the server, you create a file
$HOME/.ssh/authorized_keys, where $HOME is the home directory of the
Unix account being used for svnserve on the server.  Each line of the
file is typically copied from a client's public key file, and looks
something like:

  ssh-rsa AAAABlotsmoregookhere= address@example.com

The first field specifies the type of the key, the second is the key
itself in uuencoded format, and the third is a comment which humans
can use to identify what the key is.  In the future, we'll write these
three fields as "TYPE KEY COMMENT"

The basic trick, then, is to add a directive to this line telling sshd
to ignore the client's specified command and run a different command
instead.  The line in the authorized_keys file will then look like:

  command="COMMAND" TYPE KEY COMMENT

For svn+ssh access, the client generally specifies the command
"svnserve -t"; the following tricks will modify the command in various
ways.

Trick #1: Specify a full path to the svnserve binary
----------------------------------------------------

For this trick, specify a command like:

  command="/full/path/to/svnserve -t" TYPE KEY COMMENT

Trick #2: Specify a repository root
-----------------------------------

For this trick, add a -r option to the svnserve command:

  command="svnserve -t -r /repository/root" TYPE KEY COMMENT

Trick #3: Avoid giving full shell access to an svn user
-------------------------------------------------------

For this trick, it isn't necessary to modify the command at all.  We
just need to make sure that the client doesn't run any other commands.
However, you should also use the "no-port-forwarding" option to
prevent the client from tunneling to other ports:

  command="svnserve -t",no-port-forwarding TYPE KEY COMMENT

You may also wish to specify the options "no-pty",
"no-agent-forwarding", and "no-X11-forwarding", just to give the
client less wiggle room.

Trick #4: Use a single Unix account for multiple svn users
----------------------------------------------------------

For this trick, establish a distinct key pair for each of the svn
users, list all of the public keys in the authorized_users file, and
specify the "--tunnel-user" directive in the command for each entry:

  command="svnserve -t --tunnel-user=alice" TYPE1 KEY1 COMMENT1
  command="svnserve -t --tunnel-user=bob" TYPE2 KEY2 COMMENT2

As with trick #3, it may be wise to specify "no-port-forwarding" and
perhaps the other restriction options to prevent the users from
obtaining other kinds of access.

The --tunnel-user option is new in svn 1.1.0, so this trick will not
work if the server has svn 1.0.x.

Combining the tricks
--------------------

Here's an example of how you might combine all four tricks:

  command="/path/to/svnserve -t -r /repository/root --tunnel-user=alice",no-port-forwarding,no-agent-forwarding,no-X11-forwarding,no-pty TYPE1 KEY1 COMMENT1
  command="/path/to/svnserve -t -r /repository/root --tunnel-user=bob",no-port-forwarding,no-agent-forwarding,no-X11-forwarding,no-pty TYPE2 KEY2 COMMENT2
