En mi aplicación Cocoa estoy tratando de usar NSTask
para ejecutar algunos comandos básicos de Git. Cada vez que ejecuta un comando que requiere permisos (claves SSH) para acceder a un mando a distancia (por ejemplo git push
, git pull
), se produce un error con el siguiente error:NSTask y Git - Problemas de permisos
Permission denied (publickey). The remote end hung up unexpectedly
Ejecución de los mismos comandos de la terminal funciona bien, así que' Estoy pensando que esto podría ser un problema con NSTask
no estableciendo una variable de entorno que se usaría en algún lugar del proceso de acceso a las claves ssh. He intentado establecer manualmente las variables de entorno y HOME
USER
así:
[task setEnvironment:[NSDictionary dictionaryWithObjectsAndKeys:NSHomeDirectory(), @"HOME", NSUserName(), @"USER", nil]];
Pero esto no tiene ningún efecto. ¿Existe alguna variable de entorno particular que deba establecerse en NSTask
para que esto funcione correctamente?
EDIT: Gracias a la sugerencia de Dustin, me di cuenta de algo más. He utilizado el comando env
para listar las variables de entorno para mi sesión actual y encontré esto:
SSH_AUTH_SOCK=/tmp/launch-DMQopt/Listeners
Para probar, he copiado ese camino y establecerlo como una variable de entorno de NSTask
y corrió el código nuevo, y esta ¡tiempo funcionó! Dicho esto, estoy seguro de que SSH_AUTH_SOCK
cambia para cada sesión, así que no puedo simplemente codificarlo. ¿Cómo genero/recupero dinámicamente esta variable?
pruébelo a la inversa, use 'env -i' en la línea de comandos y vea cuánto necesita volver a agregar antes de que funcione. – Dustin
Tengo un poco más de agradecimiento gracias a su consejo, lea mi publicación editada :) – indragie