In meiner Cocoa-Anwendung versuche ich NSTask
zu verwenden, um einige grundlegende Git-Befehle auszuführen. Wenn ich einen Befehl ausführe, der Berechtigungen (SSH-Schlüssel) erfordert, um auf einen Remote zuzugreifen (z. B. git push
, git pull
), schlägt er mit dem folgenden Fehler fehl:
Berechtigung verweigert (publickey). Das Remote-Ende wurde unerwartet beendet.
Das Ausführen der gleichen Befehle von Terminal funktioniert einwandfrei, daher denke ich, dass dies ein Problem sein könnte, wenn NSTask
keine Umgebungsvariable setzt, die irgendwo während des Zugriffs auf die ssh-Schlüssel verwendet wird. Ich habe versucht, die Umgebungsvariablen HOME
und USER
wie folgt manuell einzustellen:
Aber das hat keine Wirkung. Gibt es eine bestimmte Umgebungsvariable, die ich in NSTask
einstellen muss, damit dies richtig funktioniert?
BEARBEITEN: Dank Dustins Tipp bin ich ein wenig weitergekommen, um das herauszufinden. Ich habe den Befehl env
verwendet, um die Umgebungsvariablen für meine aktuelle Sitzung aufzulisten, und ich habe Folgendes gefunden:
Zum Testen habe ich diesen Pfad kopiert und als Umgebungsvariable von NSTask
festgelegt und den Code erneut ausgeführt, und dieses Mal hat es funktioniert! Das heißt, ich bin sicher, dass sich SSH_AUTH_SOCK
für jede Sitzung ändert, so dass ich es nicht einfach fest codieren kann. Wie kann ich diese Variable dynamisch generieren / abrufen?
Sie könnten versuchen, dem Lernprogramm " zu folgen Wrapping rsync oder SSH in einer NSTask "(von Ira ), die SSH_AUTH_SOCK
variable erwähnt:
%Vor%Seit dem Schreiben dieses Posts habe ich festgestellt, dass ich einen wichtigen zusätzlichen Schritt bei der Einrichtung der Umgebungsvariablen für die NSTask weggelassen habe.
Um die passwortlose schlüsselbasierte Authentifizierung zu ermöglichen, ist es notwendig, co_de% Variable aus der Umgebung des Benutzers und diese in die Umgebung der NSTask einbinden. .
Also, zum Beispiel beim Setzen von Umgebungsvariablen;
Aber die OP indragie kommentiert:
Ich hatte das schon früher versucht, aber da es mit XCode aufgerufen wurde, war
SSH_AUTH_SOCK
env var. wurde nicht weitergeleitet.
Das Öffnen der App im Finder korrigiert dieses Problem .
%Vor%Dabei ist
SSH_AUTH_SOCK
der Pfad für die ausführbare Datei Askpass, die als Teil des Hauptpakets der Anwendung enthalten ist. (Suchen Sie dazu die ausführbare Datei unter "Produkte" in xcode, und ziehen Sie sie dann in das Feld "Bundle-Ressourcen kopieren" im Ziel der Hauptanwendung.)
Tags und Links objective-c git cocoa environment-variables nstask