Я использую 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". Чтобы добиться этого, вы можете положиться на
sudo
again :)sudo -E -u $(logname) git pull
Обратите внимание, что вы используете sudo -E
дважды: один для вызова скрипта, а другой для вызова git
внутри скрипта.
Это должно сработать :)
P.S. Если вам нужен более тонкий контроль над тем, какие переменные среды экспортируются в sudo, используйте --preserve-env=list
option вместо -E
.
решение2
Когда вы используете git с sudo, он ищет ключ в /root/.ssh/
, а не в /home/yourusername/.ssh/
. Вам просто нужно скопировать его в первый, и это должно сработать.