Trong ứng dụng Cocoa của tôi, tôi đang cố gắng sử dụng NSTask
để chạy một số lệnh Git cơ bản. Bất cứ khi nào tôi chạy một lệnh đòi hỏi quyền (khóa SSH) để truy cập từ xa (ví dụ git push
, git pull
), nó không thành công với các lỗi sau:NSTask và Git - Các vấn đề về quyền
Permission denied (publickey). The remote end hung up unexpectedly
Chạy các lệnh tương tự từ đầu cuối làm việc tốt, vì vậy tôi m nghĩ rằng đây có thể là vấn đề với NSTask
không đặt biến môi trường sẽ được sử dụng ở đâu đó trong quá trình truy cập các khóa ssh. Tôi đã thử bằng tay thiết lập các biến HOME
và USER
môi trường như thế này:
[task setEnvironment:[NSDictionary dictionaryWithObjectsAndKeys:NSHomeDirectory(), @"HOME", NSUserName(), @"USER", nil]];
Nhưng điều này không có tác dụng. Có bất kỳ biến môi trường cụ thể nào mà tôi phải đặt trong NSTask
để biến này hoạt động bình thường không?
EDIT: Nhờ mẹo của Dustin, tôi đã tìm hiểu thêm một chút trong việc tìm hiểu điều này. Tôi đã sử dụng lệnh env
vào danh sách các biến môi trường cho phiên hiện tại của tôi và tôi thấy điều này:
SSH_AUTH_SOCK=/tmp/launch-DMQopt/Listeners
Để kiểm tra, tôi sao chép con đường đó và đặt nó như là một biến môi trường của NSTask
và chạy mã một lần nữa, và điều này thời gian nó hoạt động! Điều đó nói rằng, tôi chắc chắn rằng SSH_AUTH_SOCK
thay đổi cho mỗi phiên vì vậy tôi không thể chỉ mã hóa nó. Làm thế nào để tự động tạo/lấy biến này?
hãy thử theo cách khác, sử dụng 'env -i' trên dòng lệnh và xem bạn cần thêm bao nhiêu trở lại trước khi nó hoạt động. – Dustin
Có thêm một chút nhờ mẹo của bạn, hãy đọc bài đăng đã chỉnh sửa của tôi :) – indragie