Как разрешить git pull как sudo

Как разрешить git pull как sudo

Я использую git pull(без sudo) каждый день на своей машине, у меня есть один ключ в папке ssh ( cat ~/.ssh/id_rsa.pub)

Проблема в том, что я не могу позвонить sudo git pull, потому что получаю ошибку:

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.

Вероятно, проблема с моим ключом.

Мне нужно вызвать его во внешнем скрипте (используя sudo).

Как мне позвонить sudo git pull? Как мне добавить ключ для sudo?

Короче говоря: pullне работает с sudoпочему?

решение1

Когда вы запускаете что-либо sudoбез указания конкретного пользователя, вы запускаете это от имени rootпользователя.

Судя по всему, вы клонировали свой репозиторий через SSH git(на самом деле, я полагаю, что SSH) ищет закрытый ключ SSH для rootпользователя, а не ключ вашего пользователя: /root/.ssh/вместо /home/your-user/.ssh/.

Вы можете попробовать следующее:

  • Запустите свой скрипт с помощью sudo -E: -EСохраняет переменные среды пользователя, которые будут определены при запуске в sudo (некоторые переменные SSH, я думаю, потребуются SSH_AUTH_SOCKи/или SSH_AGENT_LAUNCHERбудут необходимы, но я не знаю много подробностей).

  • Внутри вашего скрипта запустите команду git "как пользователь" вместо "как root". Чтобы добиться этого, вы можете положиться на sudoagain :)

    sudo -E -u $(logname) git pull
    

Обратите внимание, что вы используете sudo -Eдважды: один для вызова скрипта, а другой для вызова gitвнутри скрипта.

Это должно сработать :)

P.S. Если вам нужен более тонкий контроль над тем, какие переменные среды экспортируются в sudo, используйте --preserve-env=listoption вместо -E.

решение2

Когда вы используете git с sudo, он ищет ключ в /root/.ssh/, а не в /home/yourusername/.ssh/. Вам просто нужно скопировать его в первый, и это должно сработать.

Связанный контент