SYNOPSIS

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

DESCRIPTION

これは、制限されたGitアクセスを提供するためのSSHアカウントのログインシェルです。プル/プッシュ機能を実装するサーバー側のGitコマンドと、ユーザーのホームディレクトリの git-shell-commands という名前のサブディレクトリにあるカスタムコマンドの実行のみを許可します。

COMMANDS

git shell は、 -c オプションの後に以下のコマンドを受け入れます:

git receive-pack <argument>
git upload-pack <argument>
git upload-archive <argument>

対応するサーバー側コマンドを呼び出して、クライアントの「git push」または「git fetch」または「git archive --remote」リクエストをサポートします。

cvs server

CVSサーバーを模倣します。 git-cvsserver(1) 参照。

~/git-shell-commands ディレクトリが存在する場合、 git shell は、ユーザーのホームディレクトリから "git-shell-commands/<command> <arguments>" を実行することにより他のカスタムコマンドも処理します。

INTERACTIVE USE

デフォルトでは、上記のコマンドは -c オプションでのみ実行できます。シェルはインタラクティブではありません。

~/git-shell-commands ディレクトリが存在する場合、 git shell をインタラクティブに実行することもできます(引数なしで)。 help コマンドが git-shell-commands ディレクトリにある場合、許可されたアクションの概要をユーザーに提供するために実行されます。次に、 `git> ` プロンプトが表示され、「git-shell-commands」ディレクトリから任意のコマンドを入力することができます。「exit」を使用すれば接続を閉じることができます。

通常、このモードは、ユーザーがアクセスできるリポジトリの一覧表示、リポジトリの作成、削除、名前変更、またはリポジトリの説明と権限の変更を可能にする管理インターフェイスとして使用されます。

no-interactive-login コマンドが存在する場合、それが実行され、対話型シェルが中止(abort)されます。

EXAMPLES

インタラクティブログインを無効にするには、代わりにgreeting(挨拶)を表示します:

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

git-cvsserverアクセスを有効にするには(なお、git-shell-commandsディレクトリを作成するとインタラクティブログインが可能になるため、通常、上記の「no-interactive-login」の例が前提条件として必要です):

$ cat >$HOME/git-shell-commands/cvs <<\EOF
if ! test $# = 1 && test "$1" = "server"
then
        echo >&2 "git-cvsserver only handles \"server\""
        exit 1
fi
exec git cvsserver server
EOF
$ chmod +x $HOME/git-shell-commands/cvs

SEE ALSO

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

GIT

Part of the git(1) suite