A razão pela qual a etapa git pull falha é porque no Ubuntu, o Apache executa o script como o usuário www-data . Assim, git procura as chaves ssh associadas ao usuário www-data e, ao não encontrá-las, não consegue concluir a solicitação git pull .
No Ubuntu 16.04, o usuário www-data recebe o diretório inicial /var/www . Este é o diretório no qual git procura as chaves ssh para negociar a transferência. Assim, a solução é fazer o GitHub acreditar que o usuário www-data é real, atribuindo a ele um conjunto válido de chaves. Para detalhar as etapas:
Note: This assumes that you have
sudoaccess.
-
Crie um diretório
/var/www/.sshde propriedade dewww-data:www-data$ sudo mkdir -p /var/www/.ssh $ sudo chown -R www-data:www-data /var/www/.ssh -
Crie chaves ssh no diretório
$ cd /var/www/.ssh $ sudo ssh-keygen -t rsa -b 2048Quando
ssh-keygensolicita que o diretório coloque as chaves, escolha/var/www/id_rsa -
Assegure-se de que as permissões e a propriedade das chaves estejam corretas.
chowntowww-data:www-dataconforme necessário.$ ls -la /var/www/.ssh/ total 24K drwxr-xr-x 2 www-data www-data 4.0K Apr 29 23:58 ./ drwxr-xr-x 5 root root 4.0K Apr 30 00:06 ../ -rw------- 1 www-data www-data 1.7K Apr 29 23:33 id_rsa -rw-r--r-- 1 www-data www-data 394 Apr 29 23:33 id_rsa.pub -
Copie a chave
id_rsa.pubpara as chaves ssh autorizadas nas configurações do repositório do GitHub. -
É importante garantir que
git pullfuncione quando executado como o usuáriowww-data. O uso do ssh também precisa incluir a identidade do servidor do GitHub no arquivoknown_hosts. No entanto, o usuáriowww-datanão possui um shell de login por padrão. Então temos que usar um truque simples:$ sudo vi /etc/passwdEncontre a linha para
www-datae altere a/usr/sbin/nologinpara/bin/bashe salve o arquivo. A entrada parawww-datadeve ser semelhante a:www-data:x:33:33:www-data:/var/www:/bin/bash -
Altere para o usuário
www-data$ sudo su # su - www-data -
Uma vez que você está logado como
www-data, vá para o repositório git e execute umgit pullmanualmente. -
O processo ssh solicitará que você adicione a identidade do servidor GitHub ao arquivo
known_hostse use o par de chaves em/var/www/.sshpara concluir ogit pull. -
Se for bem sucedido, você deve estar definido. Tente
pushum commit para o GitHub de outro computador e verifique se o script PHP executa a solicitaçãopull. -
Redefina o arquivo
/etc/passwdpara seu estado original com o shell de login do usuáriowww-datacomo/usr/sbin/nologin