题 Git shell没有启用?


我正在尝试安装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

22
2018-06-29 14:43




git-shell 是一个受限制的shell,仅用于推/拉功能(即 git push, git fetch 和 git pull)。它并不意味着是交互式的,因此您不应该在交互式shell中登录。你可以通过添加一个来使它有点互动 git-shell-commands 用户家中的目录和符号化内部的一些二进制文件。但它非常有限(没有二进制文件 cd,例如),所以更好的选择是登录为 root 或者a sudo能干的用户和做 sudo -u git -s 得到一个完整的 bash 贝壳下 git 用户。 - ADTC


答案:


我在找到git-shell-commands后找到了这个

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

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

提供的命令:

help:打印出可用命令的名称。跑步的时候   交互式地,git-shell会在启动时自动运行'help',   只要它存在。

list:显示名称以“.git”结尾的任何裸存储库   用户的主目录。没有其他git存储库可见,   虽然它们可能通过git-shell克隆。 'list'是专门设计的   最小化必须在查找时调用git的次数   可用的存储库;如果您的设置有其他存储库   应该是用户可发现的,你可能希望修改'list'   因此。

所以我

[root@svn ~]# cp /usr/share/doc/git-1.7.4.4/contrib/git-shell-commands /home/git -R
[root@svn ~]# chown git:developers /home/git/git-shell-commands/ -R
[root@svn ~]# chmod +x /home/git/git-shell-commands/help
[root@svn ~]# chmod +x /home/git/git-shell-commands/list
[root@svn ~]# exit
[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

现在我没有看到什么是好的帮助和列表,但登录工作。 :)


16
2017-10-27 20:22



在用户的主目录中必须有裸存储库,以便“list”执行任何操作(根据自述文件) - michael


我只是必须这样做 # mkdir ~git/git-shell-commands 然后 su git 为**工作 git 1.8.1.5-r1


5
2017-10-31 22:48



也为我工作过 - maurycy
是的,它有效。现在你进入了git shell。那又怎样?除非你在里面添加一些二进制文件,否则它对于交互完全没用 git-shell-commands 夹。我认为跳过这一切并做到更有用 sudo -u git -s这样你就可以得到满满的 bash shell可以访问所有二进制文件。您还可以保留当前目录。 - ADTC


如果你 看看代码 触发该错误消息(哪个 似乎有所不同 在旧版本的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目录中的正确问题。

用户必须具有对目录的读取和执行权限才能执行   其中的程序。


3
2017-07-01 12:15



......正如它在错误消息中所说的那样。 ( - : - JdeBP
@JdeBP:我想你确实有 ~/git-shell-commands 拥有正确的权限? - VonC
你正在和错误的人说话。 - JdeBP
@JdeBP:抱歉;)@Peter,我想你确实有 ~/git-shell-commands 拥有正确的权限? - VonC
哪里可以找到git-shell命令?