blob: 11361f33e93937429a8d1791efaca5e00888f236 [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 Hamano92d80372016-07-13 22:00:0527'git shell' accepts the following commands after the `-c` option:
Junio C Hamano5e7f1312013-03-21 22:49:0128
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
Junio C Hamano92d80372016-07-13 22:00:0546By default, the commands above can be executed only with the `-c`
Junio C Hamano5e7f1312013-03-21 22:49:0147option; 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
Junio C Hamanob9d9d902018-05-23 07:07:4265EXAMPLES
66--------
Junio C Hamano5e7f1312013-03-21 22:49:0167
68To disable interactive logins, displaying a greeting instead:
Junio C Hamanof31646b2014-05-08 21:24:1269
Junio C Hamano5e7f1312013-03-21 22:49:0170----------------
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
Junio C Hamano20c484e2017-09-26 06:09:0982To enable git-cvsserver access (which should generally have the
83`no-interactive-login` example above as a prerequisite, as creating
84the git-shell-commands directory allows interactive logins):
85
86----------------
87$ cat >$HOME/git-shell-commands/cvs <<\EOF
88if ! test $# = 1 && test "$1" = "server"
89then
90echo >&2 "git-cvsserver only handles \"server\""
91exit 1
92fi
93exec git cvsserver server
94EOF
95$ chmod +x $HOME/git-shell-commands/cvs
96----------------
97
Junio C Hamano5e7f1312013-03-21 22:49:0198SEE ALSO
99--------
100ssh(1),
101linkgit:git-daemon[1],
102contrib/git-shell-commands/README
Junio C Hamano1a4e8412005-12-27 08:17:23103
Junio C Hamano1a4e8412005-12-27 08:17:23104GIT
105---
Junio C Hamanof7c042d2008-06-06 22:50:53106Part of the linkgit:git[1] suite