从Bitbucket服务器拉取Git代码

5

我在远程服务器上的 PHP 脚本中运行 git pull 遇到了问题。我查看了很多不同的来源来使其工作,但是都没有成功。所以我迄今为止已经做了什么:

  • Created the pub and private key for Apache:

    mkdir /var/www/.ssh
    sudo chown -R apache:nobody /var/www/.ssh
    su - apache -c "ssh-keygen -t rsa" 
    
  • Then I have put my public key on Bitbucket.

  • Then I run the command:

    sudo -u apache git pull 
    

一切正常。

在我写了一个简单的sh脚本之后,我从PHP中调用它。

  1. The .sh script:

    #!/bin/sh
    git pull
    
  2. and the PHP script:

    <?php    
    $cmd="./gitpullsc.sh 2>&1";
    echo exec($cmd);
    ?>
    
我通过Web浏览器运行php脚本,然后得到如下返回信息:
Permission denied (publickey). fatal: Could not read from remote repository. Please make sure you have the correct access rights and the repository exists.
然后我尝试在脚本中添加`whoami`命令(以查看运行php脚本的用户是否正确),结果是apache。所以一切正常。
我使用Red Hat Linux。
希望得到任何帮助 :)
更新:
好的,也许我找到了问题所在,但还在寻找解决方案。
我再次运行`sudo -u apache git pull`命令,现在又会被要求输入私钥密码了。
但是如果我运行`ssh-add -l`命令,则返回:
2048 **thenumber** /var/www/.ssh/id_rsa (RSA)
所以我认为一切都没问题。但问题可能是我这样运行ssh代理:
ssh-agent /bin/bash

更新

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


有趣的情况! - Sliq
你是否启用了SELinux? - dev-null-dweller
不,我没有安装它。甚至都没有安装。我会安装它,那么安装后我该怎么做? - Marko Jurinčič
1
@MarkoJurinčič,你是不是在远程服务器上把SSH私钥未加密(即没有设置密码)?这样并不安全,就像把密码明文存储在远程服务器的文件中一样。如果有人成功入侵,他们可以窃取私钥并开始使用它来登录所有具有相应公钥的SSH帐户。通过加密私钥,设置密码可以防止这种情况发生,使其无用。 - user456814
是的,我知道这不安全,但我仍然无法使用密码短语使其工作。当我们切换到生产环境时(现在我们仍在开发产品),我将重新设置密码短语并从远程服务器的终端拉取代码。 - Marko Jurinčič
2个回答

1

0

你需要管理ssh-agent的工具叫做keychain

yum install keychain

如果官方的RHEL仓库中没有,你可以从 RPM forge仓库获取。为了测试,启动一个新的用户会话并手动将密钥加载到ssh-agent中。 假设你生成的密钥叫做id_dsa,并位于~/.ssh/目录下。

$ssh-add ~/.ssh/id_dsa

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


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接