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