Estou usando git pull
(sem sudo) todos os dias na minha máquina, tenho uma chave na pasta ssh ( cat ~/.ssh/id_rsa.pub
)
O problema é que não consigo ligar sudo git pull
porque estou recebendo um erro:
sudo git pull
[email protected]: Permission denied (publickey).
fatal: Could not read from remote repository.
Please make sure you have the correct access rights
and the repository exists.
Provavelmente há problema com minha chave.
Preciso chamá-lo em meu script externo (usando sudo).
Como posso ligar sudo git pull
? Como posso adicionar chave para sudo?
Resumindo: pull
não funciona com sudo
por quê?
Responder1
Quando você executa algo sudo
sem especificar um usuário específico, você o executa como root
usuário.
Parece que você clonou seu repositório via SSH git
(na verdade, SSH, eu acho) está procurando a chave privada SSH para o root
usuário em vez da do seu usuário : /root/.ssh/
vs./home/your-user/.ssh/
Você pode tentar o seguinte:
Execute seu script usando
sudo -E
:-E
Preserva as variáveis de ambiente do usuário a serem definidas ao executar no sudo (algumas variáveis SSH, achoSSH_AUTH_SOCK
e/ouSSH_AGENT_LAUNCHER
serão necessárias, mas não sei muito sobre os detalhes).Dentro do seu script, execute o comando git "como usuário" em vez de "como root". Para conseguir isso, você pode confiar
sudo
novamente :)sudo -E -u $(logname) git pull
Observe que você está usando sudo -E
duas vezes: uma para chamar o script e outra para chamar git
dentro do script.
Isso deve funcionar :)
PS Caso você precise de um controle mais refinado de quais variáveis de ambiente são exportadas para o sudo, use --preserve-env=list
a opção em vez de -E
.
Responder2
Quando você usa o git com o sudo, ele procura a chave in /root/.ssh/
e não in /home/yourusername/.ssh/
. Você apenas precisa copiá-lo para o primeiro e deve funcionar.