我有一个文件上传表单,在文件上传后我想通过运行将文件推送到GitHub:
git add .
git commit -m "some message"
git push origin master
我该如何解决这个问题?我见过使用exec()
的例子,但这让我很紧张。
shell_exec('cd /var/www/vhost/xxx.com/httpdocs/clients/portal/upoads/54 && /usr/bin/git add -A');
shell_exec('cd /var/www/vhost/xxx.com/httpdocs/clients/portal/upoads/54 && /usr/bin/git commit -m "something 1"');
shell_exec('cd /var/www/vhost/xxx.com/httpdocs/clients/portal/upoads/54 && /usr/bin/git push origin master');
这些命令不会出错但是也不起作用。我是否需要授予apache用户访问权限才能使用ssh密钥?
答案 0 :(得分:0)
我猜是权限问题,你可以使用exec(),并通过$ output
获取错误信息exec($your_command.' 2>&1', $output, $return_var);
var_dump($output);
答案 1 :(得分:0)
我是否需要授予apache用户访问权限才能使用ssh密钥?
是强>
这意味着您必须复制该apache
用户可以阅读的密钥。除非密钥文件只能由用户读取(即密钥文件的0600
权限),否则SSH无法工作。
复制密钥,如:
mkdir -p --mode=0700 ~apache/.ssh
cp /my/id_rsa ~apache/.ssh/id_rsa
chown -R apache:apache ~apache/.ssh/id_rsa
chmod 0600 ~apache/.ssh/id_rsa
此外,每次要运行命令时都不需要cd
。使用GIT_DIR
:
putenv('GIT_DIR=/path/to/git/repo')
shell_exec('git commit ...')
答案 2 :(得分:0)
我解决了。我以root用户身份运行了所有这些。
在我的PHP脚本中,我跑了
exec("whoami");
获取正在运行该脚本的用户。然后我跑了
cat /etc/passwd
获取该用户的主目录(/var/www/vhost/mydomain.com)
我注意到在我的网络服务器(Centos 7)上我的所有网络文件都被称为操作码:psacln所以我在操作码的主文件夹中创建了一个.ssh目录:
mkdir -p --mode=0700 /var/www/vhost/mydomain.com/.ssh
cd (back to root)
cp .ssh/id_rsa /var/www/vhost/mydomain.com/.ssh/id_rsa
chown -R opcode:psacln /var/www/vhost/mydomain.com/.ssh/id_rsa
chmod 0600 /var/www/vhost/mydomain.com/.ssh/id_rsa
我缺少的是我必须移动我的known_hosts文件,因为我使用的脚本没有添加到它。
cp .ssh/known_hosts /var/www/vhost/mydomain.com/.ssh/known_hosts
chmod 0600 /var/www/vhost/mydomain.com/.ssh/known_hosts
当然,我必须在命令行登录我的服务器并对repo进行初始提交,以便在将其复制之前将其添加到我的known_hosts文件中。希望这有助于某人。