Gitシェルが有効になっていませんか?


24

gitサーバーをインストールしようとしています。gitユーザーのデフォルトシェルを/ usr / bin / git-shellに設定すると、gitとしてログインするとエラーが発生します。

fatal: Interactive git shell is not enabled.
hint: ~/git-shell-commands should exist and have read and execute access.

SSHキーベースのアクセスが機能し、権限が正しく設定されています。

Google検索では、このエラーに関して何も表示されません。

過去のインストールでもこの​​方法を使用しましたが、そのようなエラーは表示されませんでした。また、いくつかの余分なファイルまたは構成がありますが、そのようなものがない場合は、作業中のサーバーを見ました。

システム仕様:

  • Gentoo linux(最新)
  • Git 1.7.5.3

/ etc / passwd行:

git:x:1002:1004::/home/git:/usr/bin/git-shell

git-shellは、プッシュ/プル機能のみに使用される制限されたシェルです(つまりgit pushgit fetchおよびgit pull)。対話型ではないため、対話型シェルでログインしないでください。git-shell-commandsユーザーのホームにディレクトリを追加し、内部のいくつかのバイナリをシンボリックリンクすることにより、多少インタラクティブにすることができます。しかし、それは非常に限られているので(cdたとえば、バイナリはありません)、より良い代替手段は、ログインできるユーザーrootまたはsudo有能なユーザーで、ユーザーの下でsudo -u git -s完全なbashシェルを取得するgitことです。
ADTC

回答:


17

走った後にこれを見つけた locate git-shell-commands

cat /usr/share/doc/git-1.7.4.4/contrib/git-shell-commands/README

git-shellを介して呼び出し可能なサンプルプログラム。シェルがgit-shellであるユーザーのホームディレクトリに「git-shell-commands」という名前のディレクトリを配置します。そうすれば、そのユーザーとしてログインする誰でも、「git-shell-commands」ディレクトリで実行可能ファイルを実行できます。

提供されるコマンド:

help:使用可能なコマンドの名前を出力します。インタラクティブに実行すると、git-shellは起動時に自動的に「ヘルプ」を実行します(存在する場合)。

list:ユーザーのホームディレクトリの下に名前が「.git」で終わるベアリポジトリを表示します。他のgitリポジトリは表示されませんが、git-shellを介してクローン化できます。「リスト」は、利用可能なリポジトリを見つける際に行わなければならないgitの呼び出しの数を最小限に抑えるように設計されています。セットアップにユーザーが検出できる追加のリポジトリがある場合は、それに応じて「リスト」を変更できます。

そこで、次のコマンドをルートとして実行しました。

cp /usr/share/doc/git-1.7.4.4/contrib/git-shell-commands /home/git -R
chown git:developers /home/git/git-shell-commands/ -R
chmod +x /home/git/git-shell-commands/help
chmod +x /home/git/git-shell-commands/list
exit

その後、gitユーザーとして次を実行できました。

[me@svn ~]$ su git
Password:
Run 'help' for help, or 'exit' to leave.  Available commands:
list
git> help
Run 'help' for help, or 'exit' to leave.  Available commands:
list
git> list
git> exit

今、私は良いヘルプとリストが何であるかわかりませんが、ログインは機能しました。:)


1
(readmeファイルごとに)何かをする『リスト』のユーザのホームディレクトリにある裸のリポジトリがあるように持っているだろう
マイケル・

4

私はしなければならなかった# mkdir ~git/git-shell-commands、その後su gitのために働いていましたgit 1.8.1.5-r1


1
ええ、うまくいきます。これでgitシェルが起動しました。じゃあ何?git-shell-commandsフォルダ内のいくつかのバイナリをシンボリックリンクしない限り、インタラクションにはまったく役に立ちません。すべてをスキップして、すべてのバイナリにアクセスできるsudo -u git -s完全なbashシェルを取得する方が便利だと思います。また、現在のディレクトリに留まります。
ADTC

3

あなたがいる場合、コードを見て(そのエラーメッセージトリガー違っていたようだ Gitリポジトリの古いバージョンでは):

if (access(COMMAND_DIR, R_OK | X_OK) == -1) {
  die("Interactive git shell is not enabled.\n"
     "hint: ~/" COMMAND_DIR " should exist "
     "and have read and execute access."); 

これはgit-shellディレクトリの正しい問題です。

ユーザーは、ディレクトリ内のプログラムを実行するために、ディレクトリに対する読み取りおよび実行権限を持っている必要があります。


...実際には、エラーメッセージに記載されているとおりです。(-:
JdeBP

@JdeBP:ごめんなさい;)@Peterと私はあなたが~/git-shell-commands正しい許可を持っていたと思う?
VonC
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.