【问题标题】:Git via PHP & SSH: ssh authentification of user apache deniedGit 通过 PHP 和 SSH:用户 apache 的 ssh 身份验证被拒绝
【发布时间】:2014-12-24 23:04:02
【问题描述】:

我有以下设置:CentOS 6.5、git(客户端)、apache 2.2、运行测试站点等。目标是创建远程浏览器级别的访问权限来执行“git pull”。有一种通用的方法可以使用 PHP 来实现这样的事情。假设我有 2 个脚本,一个是 php(它被称为直接通过浏览器执行),另一个是 shell 脚本 - 分别是 gitpull.php 和 gitpull.sh。

gitpull.php(和index.php在同一个文件夹)内容:

<?php
$message=shell_exec("/var/www/html/...PATH-TO-INDEX.PHP.../gitpull.sh 2>&1");
?>

gitpull.sh 内容:

cd /var/www/html/...PATH-TO-FOLDER-WHERE-.GIT-WAS-INITIALIZED
git pull origin master:master

据我了解,通过调用 php 脚本,以下所有操作都将作为“apache”用户执行,因此我通过 sudo -u apache ssh-keygen -t rsa 创建了 rsa 密钥。两个密钥都在~/.ssh 目录中(apache 设置为可以访问它们),以及/var/www 中的副本(默认情况下,apache 主文件夹,我这样做是为了避免混淆,以防 apache 仅从那里使用密钥)。我假设密钥的位置无关紧要,只要它们是使用“ssh-add”在 sss 中注册的。 Apache 有权访问所有相关文件/文件夹。

我认为我的问题不在于脚本,所以我决定检查一下:

# ssh -T git@bitbucket.org

(效果很好,密钥被接受),然后

# sudo -u apache ssh -T git@bitbucket.org

返回

Permission denied (publickey).

问题:我在设置中遗漏了什么?为什么 apache 无法通过其 ssh 密钥识别?如果我在工作上错了,那么密钥必须在哪里才能让 apache 将它们与 ssh 一起使用?它可以帮助以某种自定义方式编写 ssh 访问脚本吗?

【问题讨论】:

  • 试试这个命令:sudo -u apache ssh -T git@bitbucket.org -vvv - 你应该看到它提供了你为 apache 用户创建的密钥。您还需要确保将该密钥对的公共部分上传到 bitbucket
  • 调试报告结束: // input_userauth_pk_ok: SHA1 ..... // sign_and_send_pubkey: RSA ..... // 输入密钥的密码 [密钥位置] // [空格 = 否passphrase] // 没有给出密码,尝试下一个密钥 // 我们没有发送数据包,禁用方法 // 没有更多的验证方法可以尝试 // Permission denied (publickey).
  • 我认为它需要存在密码,但据我所知,这不是真的。所以 apache 用户实际上尝试使用给定的密钥,只是它在密码短语上崩溃了,这并不是真正的问题。

标签: php linux git apache ssh


【解决方案1】:

您是否在您的 bitbucket 帐户中添加了 ssh 公钥?

【讨论】:

  • 是的。我在用户“apache”下特别制作了两个键。它们存在于机器上的“ssh-add -l”和文件夹 ~/.ssh/authorised_keys 中。当然,公共 rsa 在 bitbucket 帐户上。所以我不知道是什么绊倒了 apache。
【解决方案2】:

为了调试问题,我运行了:sudo -u www-data php git.php

这个答案通过展示如何调试来帮助! https://stackoverflow.com/a/13097666/2614353

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2019-09-28
    • 2013-08-08
    • 1970-01-01
    • 1970-01-01
    • 2021-11-28
    • 1970-01-01
    • 2014-07-14
    相关资源
    最近更新 更多