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



>假设Linux服务器上有一个远程Git存储库RR 由用户 U 拥有,根本不允许通过 SSH 进行远程登录(例如 root(。该用户既不可以使用基于密码的身份验证,也无法使用基于密钥的身份验证。但是,允许以其他用户身份登录,然后使用 susudoU 身份发出命令。

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

或者,是否有另一种方法可以在不更改其访问权限或为 U 启用 SSH 登录的情况下访问 R

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

编辑:

从评论中看来,我需要澄清我想做这样的事情的原因。R 跟踪的文件是相关服务器正在使用的系统文件 - R 不是裸存储库。这意味着存储库不能真正移动,并非没有很多诡计。

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

哦,你可以做

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

获取git fetch以将sudo用于名为 origin 的遥控器。

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

源:

我发现自己想做一件类似的事情,发现这个金块被彻底埋在了man git-config

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

比 sshd dameon 更容易建立另一个侦听器:设置一个 Apache,它:

  • 可以root运行(如"如何以root身份运行Apache?"中所述(,这不是一个好主意/做法,因为在Apache中发现的任何新漏洞都可以被利用为... root (
  • 可以将 Git 查询重定向到 git-http-backend 脚本,该脚本允许通过 HTTP 使用 Git 命令(称为智能 HTTP,在此处记录(

这样,您就不必担心sudosu

如果需要,您可以将其与身份验证步骤相结合。

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

您甚至可以使用吉托石添加授权。

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

git-shell允许您将ssh用户与git存储库联系起来。成功认证后,这些用户最终进入 git-shell,该 git-shell 禁止 shell 操作,但如果通过 git 客户端访问 - 则提供对托管存储库的完全访问权限。

您唯一要做的就是:

  1. 转到服务器上的/etc/passwd
  2. 找到您要授予 git 访问权限的用户行(可能其名称为 git (

    警告: 请勿更改当前用户的条目!您将无法再通过外壳登录!

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

pro git 书中详细介绍了此类方案的设置过程。


为了通过权限管理增强 gits 的简单服务功能(将来(,您可以使用 gitolite - 它使用 gitolite-shell(并替换 git-shell(来提供它的神奇超能力。

一个非常简单的解决方案是将存储库git clone到"不同用户"(我称之为 U2(的目录中,然后对该存储库使用ssh访问权限。 git 是一个去中心化的 VCS,所以没有"拥有"的存储库这样的东西。所有存储库都处于平等地位。

有时可以使用远程计算机中的sudo手动将更改从 U2 存储库推送回 U 存储库,甚至可以设置提交后挂钩,自动将对 U2 存储库的更改推送回原始 U 存储库。只要没有其他人直接修改 U 存储库,提交后的钩子就可以正常工作。

如果确实有人直接修改 U 存储库,则需要有人在 U2 存储库或 U 存储库中提取更改并定期合并它们。根据这些更改的范围,合并可能是微不足道的或复杂的。但是,我建议只允许任何人直接修改 U 存储库,除非您有充分的理由。在此特定情况下,U2 存储库无论如何都会成为事实上的权威存储库。因此,从某种意义上说,您可以一起删除原始

的U存储库。

这实际上是另一种简单的方法,即通过移动 U 存储库,使 U 存储库直接可供 U2 用户访问。我知道您在问题中说您不想修改原始权限,但这听起来像是 repo 的愚蠢且非常不标准的安排。git 存储库的全部意义在于使其可用于更改,如果您不能简单地做到这一点,那么我会说您的初始配置是有缺陷的。

最新更新