NSTask und Git - Berechtigungen Probleme

8

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:

%Vor%

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:

%Vor%

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?

    
indragie 03.06.2011, 03:20
quelle

1 Antwort

4

Sie könnten versuchen, dem Lernprogramm " zu folgen Wrapping rsync oder SSH in einer NSTask "(von Ira ), die SSH_AUTH_SOCK variable erwähnt:

  

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;

%Vor%

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 .

  

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.)

%Vor%     
VonC 03.06.2011, 07:16
quelle