So lassen Sie „git pull“ als Sudo zu

So lassen Sie „git pull“ als Sudo zu

Ich verwende git pull(ohne sudo) jeden Tag auf meiner Maschine, ich habe einen Schlüssel im SSH-Ordner ( cat ~/.ssh/id_rsa.pub)

Das Problem ist, dass ich nicht anrufen kann sudo git pull, weil ich eine Fehlermeldung bekomme:

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.

Wahrscheinlich liegt ein Problem mit meinem Schlüssel vor.

Ich muss es in meinem externen Skript aufrufen (mit sudo).

Wie kann ich anrufen sudo git pull? Wie kann ich einen Schlüssel für sudo hinzufügen?

Kurz gesagt: Warum pullklappt das nicht sudo?

Antwort1

Wenn Sie etwas ausführen, sudoohne einen bestimmten Benutzer anzugeben, führen Sie es als rootBenutzer aus.

Da es so aussieht, als hätten Sie Ihr Repository über SSH geklont git(eigentlich SSH, nehme ich an), wird nach dem privaten SSH-Schlüssel für den rootBenutzer und nicht nach dem Ihres Benutzers gesucht: /root/.ssh/vs. /home/your-user/.ssh/.

Sie können Folgendes versuchen:

  • Führen Sie Ihr Skript mit folgendem Befehl aus sudo -E: Dadurch -Ebleiben Ihre Benutzerumgebungsvariablen erhalten, die bei der Ausführung unter sudo definiert werden (einige SSH-Variablen werden meiner Meinung nach erforderlich SSH_AUTH_SOCKsein und/oder SSH_AGENT_LAUNCHERwerden benötigt, aber ich weiß nicht viel über die Details).

  • Führen Sie in Ihrem Skript den Git-Befehl „als Benutzer“ statt „als Root“ aus. Um dies zu erreichen, können Sie sich sudowieder auf verlassen :)

    sudo -E -u $(logname) git pull
    

Beachten Sie, dass Sie es zweimal verwenden sudo -E: Einmal, um das Skript aufzurufen, und einmal, um gitinnerhalb des Skripts aufzurufen.

Das sollte funktionieren :)

PS: Falls Sie eine feinere Kontrolle darüber benötigen, welche Umgebungsvariablen nach sudo exportiert werden, verwenden Sie --preserve-env=listdie Option statt -E.

Antwort2

Wenn Sie git mit sudo verwenden, sucht es nach dem Schlüssel in /root/.ssh/und nicht in /home/yourusername/.ssh/. Sie müssen ihn nur in ersteres kopieren und es sollte funktionieren.

verwandte Informationen