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 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
