W mojej aplikacji Cocoa próbuję użyć NSTask
do uruchomienia podstawowych poleceń Git. Ilekroć uruchomić polecenie, które wymaga uprawnień (klucze SSH), aby uzyskać dostęp do zdalnego (np git push
, git pull
), nie powiedzie się z powodu następującego błędu:NSTask i Git - problemy z uprawnieniami
Permission denied (publickey). The remote end hung up unexpectedly
Running te same polecenia z terminala działa dobrze, więc jestem m myśli, że to może być problem z NSTask
nie ustawianiem zmiennej środowiskowej, która byłaby używana gdzieś w procesie uzyskiwania dostępu do kluczy ssh. Próbowałem ręcznie ustawienie zmiennych środowiskowych HOME
i USER
tak:
[task setEnvironment:[NSDictionary dictionaryWithObjectsAndKeys:NSHomeDirectory(), @"HOME", NSUserName(), @"USER", nil]];
Ale to nie ma znaczenia. Czy jest jakaś konkretna zmienna środowiskowa, którą muszę ustawić w NSTask
, aby to działało poprawnie?
EDYTOWANIE: Dzięki wskazówkom Dustina, udało mi się to trochę lepiej zrozumieć. Użyłem komendy env
do listy zmiennych środowiskowych dla mojego bieżącej sesji i znalazłem to:
SSH_AUTH_SOCK=/tmp/launch-DMQopt/Listeners
Aby przetestować, skopiowałem tę ścieżkę i ustawić go jako zmiennej środowiskowej z NSTask
i pobiegł ponownie kod, a to czas to działało! To powiedziawszy, jestem pewien, że SSH_AUTH_SOCK
zmienia się dla każdej sesji, więc nie mogę po prostu jej zakodować. Jak dynamicznie generować/pobierać tę zmienną?
Wypróbuj w inny sposób, użyj 'env -i' w linii poleceń i zobacz, ile musisz dodać, zanim zadziała. – Dustin
Trochę dalej dzięki twojej wskazówce, przeczytaj mój zredagowany wpis :) – indragie