日本語 ▾ トピック ▾ 最新バージョン ▾ 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への制限付きアクセスを提供します。pull/push機能を実装するサーバー側のGitコマンド、およびユーザーのホームディレクトリ内のgit-shell-commandsという名前のサブディレクトリに存在するカスタムコマンドのみの実行を許可します。

コマンド

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

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

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

cvs server

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

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

インタラクティブな使用

デフォルトでは、上記のコマンドは-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