git shell没有启用?


24

我正在尝试安装git服务器。当我将我的git用户的默认shell设置为/ 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 fetchgit pull)。它并不意味着是交互式的,因此您不应登录交互式shell。您可以通过git-shell-commands在用户的家中添加目录并将其中的一些二进制文件符号链接来使其具有某种程度的交互性。但这是非常有限的(cd例如,没有二进制),因此更好的替代方法是以root具有sudo能力的用户身份登录,或者在用户下sudo -u git -s获得完整的bashshell git
ADTC

Answers:


17

我跑步后发现了这个 locate git-shell-commands

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

可通过git-shell调用的示例程序。在名为git-shell的用户的主目录中放置一个名为“ git-shell-commands”的目录。然后,以该用户身份登录的任何人都将能够在'git-shell-commands'目录中运行可执行文件。

提供的命令:

帮助:打印出可用命令的名称。交互式运行时,git-shell将在启动时自动运行“帮助”(如果存在)。

list:显示用户主目录下名称以“ .git”结尾的任何裸仓库。尽管可以通过git-shell克隆其他git存储库,但看不到其他git存储库。“列表”旨在最大程度地减少寻找可用存储库时必须进行的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
用户的主目录中必须有裸露的存储库,以便“列表”执行任何操作(根据自述文件)
michael 2012年

4

我只需要做# mkdir ~git/git-shell-commands然后su git工作git 1.8.1.5-r1


1
是的,它有效。现在您在git shell中。那呢 除非您在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
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.