日本語 ▾ トピック ▾ 最新バージョン ▾ git-shell は 2.18.0 で最終更新されました

名前

git-shell - Git 専用 SSH アクセス用の制限付きログインシェル

概要

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

説明

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

コマンド

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

git receive-pack <引数>
git upload-pack <引数>
git upload-archive <引数>

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

cvs server

CVS サーバーを模倣します。git-cvsserver[1] を参照してください。

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

対話的使用

デフォルトでは、上記のコマンドは -c オプションでのみ実行でき、シェルは対話式ではありません。

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

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

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

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

$ 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

関連項目

ssh(1)、git-daemon[1]、contrib/git-shell-commands/README

GIT

git[1]スイートの一部

scroll-to-top