通过SSH访问远程Git存储库时使用su / sudo

时间:2014-04-21 09:42:16

标签: linux git ssh

假设Linux服务器上有一个远程Git存储库 R R 归用户 U 所有,根本不允许通过SSH进行远程登录(例如root)。基于密码和基于密钥的身份验证均不适用于该用户。但是, 允许以其他用户身份登录,然后使用susudo U 发出命令。

是否可以将这两种方法结合起来,以便Git在远程服务器上使用susudo来访问存储库?

或者,是否有其他方法可以访问 R 而不更改其访问权限或启用 U 的SSH登录?

P.S。:我不介意手动输入密码,例如在su提示符下,只要Git处理其余部分。

修改

从评论中可以看出,我需要澄清我想要做这样的事情的原因。 R 跟踪的文件是相关服务器正在使用的系统文件 - R 不是裸存储库。这意味着无法真正移动存储库,而不是没有大量的诡计。

让Git使用sudo将允许使用保护这些文件的相同安全模型来访问 R ,而不是通过必须单独配置和同步的单独途径

4 个答案:

答案 0 :(得分:7)

哦,你可以做到

git config remote.origin.uploadpack "sudo -u U git-upload-pack"

git fetchsudo用于名为origin的远程。

您需要确保设置sudo以允许此用户在没有密码的情况下执行此命令,因为我看不到提示输入密码。

来源:

我发现自己想要做一些类似的事情,并发现这个金块彻底埋没在man git-config

我应该指出,这只占我工作的一半,因为我只需要git fetch才能工作。我想你可以用remote.origin.receivepack做类似的事情,以便让git push工作,但我没有尝试过。

答案 1 :(得分:6)

更容易建立另一个监听器而不是sshd dameon:设置一个Apache,其中:

这样,您就不必担心sudosu

如果您愿意,可以将其与身份验证步骤结合起来。

<Location /git>
  AuthType Basic
  AuthName "Private Git Access"
  AuthUserFile "/etc/git-auth-file"
  Require valid-user
</Location>

您甚至可以添加authorization with gitolite

答案 2 :(得分:2)

Git已经提供了一些服务器功能,可以让客户端用户可以访问存储库。一个似乎最符合您需求的服务解决方案是使用git-shell

git-shell允许您将ssh-users与git-repositories绑定。成功验证后,这些用户最终会进入禁止shell操作的git-shell,但是 - 如果通过git客户端访问 - 则可以完全访问托管存储库。

你唯一必须做的是:

  1. 转到服务器上的/etc/passwd
  2. 找到您想要的用户行git-access(可能是其名称为git

      

    警告更改您的当前用户的条目!您将无法再通过shell登录了!

  3. 将该用户的shell引用从(f.e。)/bin/bash更改为/usr/bin/git-shell(具体路径取决于系统的配置)。

  4. pro git book中详细描述了此类场景的设置过程。


    要通过权限管理增强gits简单服务功能(将来),您可以使用gitolite - 它使用gitolite-shell(并替换git-shell)来提供它的神奇超级大国。< / p>

答案 3 :(得分:0)

一个非常简单的解决方案是将git clone回购到&#34;不同的用户&#34; (我将调用U2)的目录,然后对该repo使用ssh访问权限。 git是一个分散的VCS,因此没有#34;拥有&#34;回购。所有存储库都处于平等地位。

您可以偶尔使用来自远程计算机的sudo手动将更改从U2 repo推回到U repo中,或者您甚至可以设置一个post-commit挂钩,它会自动将更改重新推送到U2 repo回到原来的U回购。只要没有其他人直接修改U repo,post-commit钩子就可以正常工作。

如果你确实有人直接修改了U盘,那么有人需要在U2仓库或U盘中提取更改并定期合并。根据这些更改的范围,合并可能是微不足道的或复杂的。但是,我建议不要让任何人直接修改U盘,除非你有充分的理由。在这种特殊情况下,无论如何,U2回购成为事实上的权威回购。所以在某种意义上你可以放弃原来的U盘。

这实际上是另一种简单的方法,即简单地通过移动U2用户直接访问U repo。我知道你在你的问题中说你不想修改原始权限,但这听起来像是一个愚蠢而且非常非标准的回购安排。 git repo的重点是让它可用于更改,如果你不能简单地这样做,那么我会说你的初始配置是有缺陷的。