GIT-SHELL(1)                     Git Manual                     GIT-SHELL(1)

NAME         top

       git-shell - Restricted login shell for Git-only SSH access

SYNOPSIS         top

       chsh -s $(command -v git-shell) <user>
       git clone <user>@localhost:/path/to/repo.git
       ssh <user>@localhost

DESCRIPTION         top

       This is a login shell for SSH accounts to provide restricted Git
       access. It permits execution only of server-side Git commands
       implementing the pull/push functionality, plus custom commands
       present in a subdirectory named git-shell-commands in the user’s home

COMMANDS         top

       git shell accepts the following commands after the -c option:

       git receive-pack <argument>, git upload-pack <argument>, git
       upload-archive <argument>
           Call the corresponding server-side command to support the
           client’s git push, git fetch, or git archive --remote request.

       cvs server
           Imitate a CVS server. See git-cvsserver(1).

       If a ~/git-shell-commands directory is present, git shell will also
       handle other, custom commands by running
       "git-shell-commands/<command> <arguments>" from the user’s home


       By default, the commands above can be executed only with the -c
       option; the shell is not interactive.

       If a ~/git-shell-commands directory is present, git shell can also be
       run interactively (with no arguments). If a help command is present
       in the git-shell-commands directory, it is run to provide the user
       with an overview of allowed actions. Then a "git> " prompt is
       presented at which one can enter any of the commands from the
       git-shell-commands directory, or exit to close the connection.

       Generally this mode is used as an administrative interface to allow
       users to list repositories they have access to, create, delete, or
       rename repositories, or change repository descriptions and

       If a no-interactive-login command exists, then it is run and the
       interactive shell is aborted.

EXAMPLE         top

       To disable interactive logins, displaying a greeting instead:

           $ chsh -s /usr/bin/git-shell
           $ mkdir $HOME/git-shell-commands
           $ cat >$HOME/git-shell-commands/no-interactive-login <<\EOF
           printf '%s\n' "Hi $USER! You've successfully authenticated, but I do not"
           printf '%s\n' "provide interactive shell access."
           exit 128
           $ chmod +x $HOME/git-shell-commands/no-interactive-login

SEE ALSO         top

       ssh(1), git-daemon(1), contrib/git-shell-commands/README

GIT         top

       Part of the git(1) suite

COLOPHON         top

       This page is part of the git (Git distributed version control system)
       project.  Information about the project can be found at 
       ⟨⟩.  If you have a bug report for this manual page,
       see ⟨⟩.  This page was obtained from the
       project's upstream Git repository ⟨⟩ on
       2017-03-13.  If you discover any rendering problems in this HTML ver‐
       sion of the page, or you believe there is a better or more up-to-date
       source for the page, or you have corrections or improvements to the
       information in this COLOPHON (which is not part of the original man‐
       ual page), send a mail to

Git           07/16/2016                     GIT-SHELL(1)