Nella mia applicazione Cocoa sto provando a utilizzare NSTask
per eseguire alcuni comandi Git di base. Ogni volta che ho eseguito un comando che richiede autorizzazioni (chiavi SSH) per accedere a un remoto (ad esempio git push
, git pull
), non riesce con il seguente errore:NSTask e Git - Problemi di autorizzazioni
Permission denied (publickey). The remote end hung up unexpectedly
Esecuzione gli stessi comandi da terminale funziona bene, così ho' Pensando che questo potrebbe essere un problema con NSTask
non impostare una variabile di ambiente che verrebbe utilizzata da qualche parte nel processo di accesso alle chiavi ssh. Ho provato a impostare manualmente le variabili d'ambiente e HOME
USER
come questo:
[task setEnvironment:[NSDictionary dictionaryWithObjectsAndKeys:NSHomeDirectory(), @"HOME", NSUserName(), @"USER", nil]];
Ma questo non ha alcun effetto. C'è qualche particolare variabile di ambiente che devo impostare in NSTask
affinché funzioni correttamente?
MODIFICA: Grazie al suggerimento di Dustin, ho avuto un po 'di più nel capire questo. Ho usato il comando env
per elencare le variabili di ambiente per la mia sessione corrente e ho trovato questo:
SSH_AUTH_SOCK=/tmp/launch-DMQopt/Listeners
Per provare, ho copiato quel percorso e impostarlo come una variabile di ambiente di NSTask
e corse di nuovo il codice, e questo tempo ha funzionato! Detto questo, sono certo che le modifiche a SSH_AUTH_SOCK
per ogni sessione, quindi non posso semplicemente hardcode. Come faccio a generare/recuperare dinamicamente questa variabile?
Provalo nell'altro senso, usa 'env -i' sulla riga di comando e vedi quanto devi aggiungere prima che funzioni. – Dustin
Ottenuto un po 'di più grazie al tuo suggerimento, leggi il mio post modificato :) – indragie