sudo -u git 克隆

sudo -u git 克隆

我使用的是 Ubuntu 服务器 14.04。

我正在使用 apache Web 服务器,它作为www-数据。我需要去做git clone 从脚本(网络挂钩)。该脚本将运行www-数据用户权限。

git clone在我遇到权限问题的目录中以普通用户身份运行/var/www/html,这很好,因为我只想要www-数据用户能够在那里书写。

www-数据用户的 home 设置为 ,/var/www并且 ssh 密钥位于/var/www/.ssh.

如果我运行:

sudo git clone [email protected]:user/repo.git

它按预期工作 - 我的用户的 ssh 公钥列在authorized_keys @ my.git.server 中。

但是我需要从 bash 脚本运行并具有正常权限。

所以我复制了公共 ssh 密钥www-数据用户访问 my.git.server 上的authorized_keys 文件。理论上这应该意味着www-数据用户可以通过 ssh 启动 git 克隆,从而无需密码并且非常安全。

所以为了测试它,我想我需要运行类似的东西:

sudo -u www-data -H git clone [email protected]:user/repo.git

我的理解是,这会让我假设www-数据用户,设置我的主目录,以便在发出 over ssh~/.ssh时该目录位于工作目录中。git clone

当我尝试执行该命令时,我遇到的问题是以下错误输出:

Cloning into 'repo'...
fatal: 'user/repo.git' does not appear to be a git repository
fatal: Could not read from remote repository.

就像我说的,如果我以 sudo 身份运行 - 没问题。仅当我尝试作为 www-data 运行时。感觉命令的解释方式存在问题,迫使它错误地读取路径/存储库名称?


根据 l0b0 的响应,输出如下:

james-c@WebHost-1:~$ sudo ssh -v [email protected] 2>&1 | grep 'identity file'
debug1: identity file /root/.ssh/id_rsa type -1
debug1: identity file /root/.ssh/id_rsa-cert type -1
debug1: identity file /root/.ssh/id_dsa type -1
debug1: identity file /root/.ssh/id_dsa-cert type -1
debug1: identity file /root/.ssh/id_ecdsa type -1
debug1: identity file /root/.ssh/id_ecdsa-cert type -1
debug1: identity file /root/.ssh/id_ed25519 type -1
debug1: identity file /root/.ssh/id_ed25519-cert type -1
james-c@WebHost-1:~$ sudo -u www-data ssh -v [email protected] 2>&1 | grep 'identity file'
debug1: identity file /var/www/.ssh/id_rsa type 1
debug1: identity file /var/www/.ssh/id_rsa-cert type -1
debug1: identity file /var/www/.ssh/id_dsa type -1
debug1: identity file /var/www/.ssh/id_dsa-cert type -1
debug1: identity file /var/www/.ssh/id_ecdsa type -1
debug1: identity file /var/www/.ssh/id_ecdsa-cert type -1
debug1: identity file /var/www/.ssh/id_ed25519 type -1
debug1: identity file /var/www/.ssh/id_ed25519-cert type -1

不太确定我在这里要找什么?

答案1

我遇到了同样的问题,似乎以这种方式切换用户时环境被保留。这会导致加载错误的 git 配置,并因权限问题而失败。

就我而言,我通过使用以下命令规避了该问题

sudo -u deploydeputy /bin/bash -c "export HOME=/home/deploydeputy && git clone [email protected]:inventid/cdn.git /tmp/cdn"

相关内容