blob: c35051ba58b63cdc489b0ee3f4ffb72631b619e3 [file] [log] [blame]
Junio C Hamano1a4e8412005-12-27 08:17:231git-shell(1)
2============
3
4NAME
5----
Junio C Hamano3b4609d2010-09-30 00:04:346git-shell - Restricted login shell for Git-only SSH access
Junio C Hamano1a4e8412005-12-27 08:17:237
8
9SYNOPSIS
10--------
Junio C Hamano15567bc2011-07-23 00:51:5911[verse]
Junio C Hamano5e7f1312013-03-21 22:49:0112'chsh' -s $(command -v git-shell) <user>
13'git clone' <user>`@localhost:/path/to/repo.git`
14'ssh' <user>`@localhost`
Junio C Hamano1a4e8412005-12-27 08:17:2315
16DESCRIPTION
17-----------
Junio C Hamano1a4e8412005-12-27 08:17:2318
Junio C Hamano5e7f1312013-03-21 22:49:0119This is a login shell for SSH accounts to provide restricted Git access.
20It permits execution only of server-side Git commands implementing the
21pull/push functionality, plus custom commands present in a subdirectory
22named `git-shell-commands` in the user's home directory.
Junio C Hamano3b4609d2010-09-30 00:04:3423
Junio C Hamano5e7f1312013-03-21 22:49:0124COMMANDS
25--------
Junio C Hamano3b4609d2010-09-30 00:04:3426
Junio C Hamano5e7f1312013-03-21 22:49:0127'git shell' accepts the following commands after the '-c' option:
28
29'git receive-pack <argument>'::
30'git upload-pack <argument>'::
31'git upload-archive <argument>'::
32Call the corresponding server-side command to support
33the client's 'git push', 'git fetch', or 'git archive --remote'
34request.
35'cvs server'::
36Imitate a CVS server. See linkgit:git-cvsserver[1].
37
38If a `~/git-shell-commands` directory is present, 'git shell' will
39also handle other, custom commands by running
40"`git-shell-commands/<command> <arguments>`" from the user's home
41directory.
42
43INTERACTIVE USE
44---------------
45
46By default, the commands above can be executed only with the '-c'
47option; the shell is not interactive.
48
49If a `~/git-shell-commands` directory is present, 'git shell'
50can also be run interactively (with no arguments). If a `help`
51command is present in the `git-shell-commands` directory, it is
52run to provide the user with an overview of allowed actions. Then a
53"git> " prompt is presented at which one can enter any of the
54commands from the `git-shell-commands` directory, or `exit` to close
55the connection.
56
57Generally this mode is used as an administrative interface to allow
58users to list repositories they have access to, create, delete, or
59rename repositories, or change repository descriptions and
60permissions.
61
62If a `no-interactive-login` command exists, then it is run and the
63interactive shell is aborted.
64
65EXAMPLE
66-------
67
68To disable interactive logins, displaying a greeting instead:
69+
70----------------
71$ chsh -s /usr/bin/git-shell
72$ mkdir $HOME/git-shell-commands
73$ cat >$HOME/git-shell-commands/no-interactive-login <<\EOF
74#!/bin/sh
75printf '%s\n' "Hi $USER! You've successfully authenticated, but I do not"
76printf '%s\n' "provide interactive shell access."
77exit 128
78EOF
79$ chmod +x $HOME/git-shell-commands/no-interactive-login
80----------------
81
82SEE ALSO
83--------
84ssh(1),
85linkgit:git-daemon[1],
86contrib/git-shell-commands/README
Junio C Hamano1a4e8412005-12-27 08:17:2387
Junio C Hamano1a4e8412005-12-27 08:17:2388GIT
89---
Junio C Hamanof7c042d2008-06-06 22:50:5390Part of the linkgit:git[1] suite