Git:通过ssh推送到ssh rootlogin被禁用的根拥有的存储库

这甚至有可能吗?

总结,我在服务器上运行木偶大师,理想情况下,我们希望通过ssh禁用rootlogin,如果需要root访问,我们希望通过sudo强制所有访问

但是我们有使用git repo来pipe理清单的puppet,这个repo目前由root拥有,目前我只知道2个解决scheme

  1. (较不理想)只允许通过密钥authentication的访问 – 如果是这样,我可以locking它只允许git推命令?
  2. 在/ etc / puppet中拥有不同的所有者的回购 – 这样可以傀儡工作吗?
  3. 相关的Sudoconfiguration和命令可以解决这个问题吗?

可以将Git仓库configuration为维护组写入权限(创build仓库时选项 – --shared )。 使用它,您可以将需要访问存储库的任何帐户添加到特定的组,以便他们可以访问它。

我这样做我们的git服务器。 我还将每个用户的主目录中的符号链接放到每个他们可以访问的存储库中,这样每个人都可以使用相对URL进行访问。

我喜欢做的是在puppet master上有一个“暂存”裸git回购,我推送到它运行各种预先提交和后提交的钩子。 预提交钩子检查木偶语法(以便不能提交语法错误的代码)和提交后挂钩实际上将代码放到/ etc / puppet中,然后重新启动Apache(修复puppet 2.6中的旧caching错误)

有一个你推动的中转区,使得部署木偶代码的过程更加primefaces化。 否则,傀儡大师可能会向客户提供半委托代码。

回答我自己的问题,我看了丹尼尔提供的信息,但它没有统计,我研究了git组写作,并来到http://andyregan.net/blog/archives/504

通过一个普通组(puppet)给我的存储库组所有权并将相关用户添加到该组,然后运行:

 chmod -R g+swX /etc/puppet/ cd /etc/puppet git repo-config core.sharedRepository true 

为我完美工作,我可以推到一个根拥有的存储库,木偶仍然工作,我不使用root sshlogin这样做

赢,赢

UPDATE

我再次与puppet有这个问题,但看起来处理它在一个更好的方式,并通过在env_reset行后面添加以下内容来解决这个替代scheme:

 Defaults env_keep += SSH_AUTH_SOCK 

这使我可以像这样运行一个命令:

 cd /etc/puppet && sudo git pull && sudo git submodule sync && sudo git submodule update --init --recursive 

在一个耙文件(我的用户已经通过Sudo nopasswd权限),一切工作相应。 我所取得的基本上是把我的ssh-agent转发ssh-key到root用户,然后做一个git pull,就像我以非root用户身份连接一样,而不把我的ssh密钥存储在root用户下(或者我的非root用户服务器上的特权帐户)Win Win