我使用的是 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"