]>
Commit | Line | Data |
---|---|---|
d43367af PB |
1 | git-shell(1) |
2 | ============ | |
3 | ||
4 | NAME | |
5 | ---- | |
70256a3a | 6 | git-shell - Restricted login shell for Git-only SSH access |
d43367af PB |
7 | |
8 | ||
9 | SYNOPSIS | |
10 | -------- | |
7791a1d9 | 11 | [verse] |
cdd9b3c9 JN |
12 | 'chsh' -s $(command -v git-shell) <user> |
13 | 'git clone' <user>`@localhost:/path/to/repo.git` | |
14 | 'ssh' <user>`@localhost` | |
d43367af PB |
15 | |
16 | DESCRIPTION | |
17 | ----------- | |
70256a3a | 18 | |
cdd9b3c9 JN |
19 | This is a login shell for SSH accounts to provide restricted Git access. |
20 | It permits execution only of server-side Git commands implementing the | |
21 | pull/push functionality, plus custom commands present in a subdirectory | |
22 | named `git-shell-commands` in the user's home directory. | |
70256a3a | 23 | |
cdd9b3c9 JN |
24 | COMMANDS |
25 | -------- | |
26 | ||
23f8239b | 27 | 'git shell' accepts the following commands after the `-c` option: |
cdd9b3c9 JN |
28 | |
29 | 'git receive-pack <argument>':: | |
30 | 'git upload-pack <argument>':: | |
31 | 'git upload-archive <argument>':: | |
32 | Call the corresponding server-side command to support | |
33 | the client's 'git push', 'git fetch', or 'git archive --remote' | |
34 | request. | |
35 | 'cvs server':: | |
36 | Imitate a CVS server. See linkgit:git-cvsserver[1]. | |
37 | ||
38 | If a `~/git-shell-commands` directory is present, 'git shell' will | |
39 | also handle other, custom commands by running | |
40 | "`git-shell-commands/<command> <arguments>`" from the user's home | |
41 | directory. | |
42 | ||
43 | INTERACTIVE USE | |
44 | --------------- | |
70256a3a | 45 | |
23f8239b | 46 | By default, the commands above can be executed only with the `-c` |
cdd9b3c9 JN |
47 | option; the shell is not interactive. |
48 | ||
49 | If a `~/git-shell-commands` directory is present, 'git shell' | |
50 | can also be run interactively (with no arguments). If a `help` | |
51 | command is present in the `git-shell-commands` directory, it is | |
52 | run 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 | |
54 | commands from the `git-shell-commands` directory, or `exit` to close | |
55 | the connection. | |
56 | ||
57 | Generally this mode is used as an administrative interface to allow | |
58 | users to list repositories they have access to, create, delete, or | |
59 | rename repositories, or change repository descriptions and | |
60 | permissions. | |
61 | ||
35297089 JN |
62 | If a `no-interactive-login` command exists, then it is run and the |
63 | interactive shell is aborted. | |
64 | ||
76a8788c NTND |
65 | EXAMPLES |
66 | -------- | |
35297089 JN |
67 | |
68 | To disable interactive logins, displaying a greeting instead: | |
e28dcdce | 69 | |
35297089 JN |
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 | |
75 | printf '%s\n' "Hi $USER! You've successfully authenticated, but I do not" | |
76 | printf '%s\n' "provide interactive shell access." | |
77 | exit 128 | |
78 | EOF | |
79 | $ chmod +x $HOME/git-shell-commands/no-interactive-login | |
80 | ---------------- | |
81 | ||
9a42c03c JK |
82 | To enable git-cvsserver access (which should generally have the |
83 | `no-interactive-login` example above as a prerequisite, as creating | |
84 | the git-shell-commands directory allows interactive logins): | |
85 | ||
86 | ---------------- | |
87 | $ cat >$HOME/git-shell-commands/cvs <<\EOF | |
88 | if ! test $# = 1 && test "$1" = "server" | |
89 | then | |
90 | echo >&2 "git-cvsserver only handles \"server\"" | |
91 | exit 1 | |
92 | fi | |
93 | exec git cvsserver server | |
94 | EOF | |
95 | $ chmod +x $HOME/git-shell-commands/cvs | |
96 | ---------------- | |
97 | ||
cdd9b3c9 JN |
98 | SEE ALSO |
99 | -------- | |
100 | ssh(1), | |
101 | linkgit:git-daemon[1], | |
102 | contrib/git-shell-commands/README | |
d43367af | 103 | |
d43367af PB |
104 | GIT |
105 | --- | |
9e1f0a85 | 106 | Part of the linkgit:git[1] suite |