5

我从远程服务器上的 php 脚本运行 git pull 时遇到问题。我查看了很多不同的资源来使其工作,但没有一个对我有用。那么到目前为止我做了什么:

  • 为 Apache 创建了公钥和私钥:

    mkdir /var/www/.ssh
    sudo chown -R apache:nobody /var/www/.ssh
    su - apache -c "ssh-keygen -t rsa" 
    
  • 然后我将我的公钥放在 Bitbucket 上。

  • 然后我运行命令:

    sudo -u apache git pull 
    

一切正常。

毕竟我写了一个简单的sh脚本,我从PHP.

  1. .sh 脚本:

    #!/bin/sh
    git pull
    
  2. 和 PHP 脚本:

    <?php    
    $cmd="./gitpullsc.sh 2>&1";
    echo exec($cmd);
    ?>
    

我从网络浏览器运行 php 脚本,我得到了这个:

权限被拒绝(公钥)。
致命:无法从远程存储库中读取。

请确保您具有正确的访问权限并且存储库存在。

然后我尝试添加到脚本whoami(以查看运行 php 脚本的用户是否正确),然后我得到了 apache。所以一切正常。

我使用红帽 Linux。

任何帮助表示赞赏:)

更新

好的,也许我发现了问题,但仍在寻找解决方案。

我再次运行sudo -u apache git pull,现在我再次被要求输入私钥密码。

但是,如果我运行命令ssh-add -l,我会得到:

2048 * **号码** /var/www/.ssh/id_rsa (RSA)

所以我认为一切都很好。但问题可能是我以这种方式运行 ssh 代理:

ssh-agent /bin/bash

更新

是的,问题确实是密码提示。我仍然不知道如何修复它,但现在我只是将密码留空并且它可以工作......

4

2 回答 2

1

我回答了一个类似的问题。我真的很想添加一条评论来引用该答案,但我没有足够的积分来添加评论。

这个想法是使用一次启动 ssh-agent 并将您的密钥加载到它。稍后,在您的 .bashrc 中,您更新环境变量,使其指向同一个 ssh-agent(已经有密钥)。

请查看尝试使用 Capistrano 进行部署,但我的远程计算机上的 ssh-agent 不会保持我的身份加载,因此 git 命令失败;为什么?

于 2013-09-30T05:29:34.487 回答
0

你需要ssh-agent被叫的经理keychain

百胜安装钥匙串

如果不在官方 RHEL 存储库中,您可以从RPM forge存储库中获取它。测试启动新用户会话并手动将密钥加载到 ssh-agent。假设您生成的密钥称为 id_dsa 并且位于 ~/.ssh/ 目录内。

$ssh-add ~/.ssh/id_dsa

但是,这仍然可能无法解决您的浏览器问题,因为这是 apache 用户的不同用户会话。

于 2013-08-05T04:06:03.000 回答