libssh2 - Chuyển tiếp đại lý không hoạt động


2

tôi đang dùng libssh2 thư viện để kết nối ssh trong ứng dụng di động của tôi. Ở đây tôi muốn sử dụng Agent Forwarding ủng hộ.

Tôi đã làm theo quy trình tương tự như họ đã cung cấp trong ví dụ ở đây Đại lý LibSSH2 Chuyển tiếp .

Tôi có thể tạo tác nhân thành công nhưng khi tôi cố gắng kết nối nó với libssh2_agent_connect(agent) Nó cho tôi lỗi -39 LIBSSH2_ERROR_BAD_USE.

Vâng, tôi đang kiểm tra điều tương tự bằng cách sử dụng Thiết bị đầu cuối MAC OSX và nó hoạt động tốt. Xin đề nghị nếu có gì sai,

Đây là cách tôi đang cố gắng một lần để kết nối thành công

struct libssh2_agent_publickey *identity, *prev_identity = NULL;
int rc;
agent = libssh2_agent_init(session);

if (!agent)
{
    fprintf(stderr, "Failure initializing ssh-agent support\n");
    rc = 1;
}

int temp=libssh2_agent_connect(agent);
if (temp)
{
    fprintf(stderr, "Failure connecting to ssh-agent\n");
    rc = 1;
}

Có gì sai ở đây? xin đề nghị.


Bạn có bất kỳ lỗi hoặc đầu ra dài dòng. "không hoạt động" là định nghĩa khá rộng.
Jakuje

ohh xin lỗi tôi đã bỏ lỡ phần đó, bây giờ chỉnh sửa trong câu hỏi cũng đề cập ở đây. khi tôi cố gắng kết nối nó với libssh2_agent_connect (tác nhân) Nó sẽ báo lỗi -39 LIBSSH2_ERROR_BAD_USE.
Niks

Chỉ để chắc chắn. Bạn có đại lý đang chạy?
Jakuje

Vâng, nó đang chạy. Tôi có thể ssh mà không cần hỏi / nhập paraph khẩu khi tôi cố gắng ssh với máy khác của tôi, nơi tôi đã sao chép khóa công khai mà tôi đã thêm vào đại lý.
Niks

@Jakuje có ý kiến ​​gì không?
Niks

Câu trả lời:


1

Từ mã tại https://github.com/libssh2/libssh2/blob/master/src/agent.c

path = getenv("SSH_AUTH_SOCK");
if (!path)
    return _libssh2_error(agent->session, LIBSSH2_ERROR_BAD_USE,
                          "no auth sock variable");

Vì vậy, rõ ràng, lỗi này xảy ra do bạn không có biến môi trường trỏ đến ổ cắm tác nhân được đặt chính xác. Có mã của bạn in giá trị của getenv("SSH_AUTH_SOCK") trong trường hợp có lỗi để xác nhận điều này


Cảm ơn phản hồi, đường dẫn Có là NULL của biến. Máy khách SSH của tôi là Mac osx có thể có sự khác biệt nào với unix không? Những gì tôi đang làm là đầu tiên kết nối với PC của tôi sau đó tôi bắt đầu kết nối với đại lý với cùng một người dùng và phiên. Tôi có thể tạo đại lý nhưng không thể kết nối. Khi tôi nhận được giá trị NULL cho đường dẫn của biến môi trường, bạn có thể vui lòng gợi ý cho tôi những gì có thể sai HOẶC tôi đang đi với dòng chảy sai? Cảm ơn
Niks

Để rõ ràng một lần nữa, bạn có các khóa trên máy khách mac của mình, bạn đang thêm các khóa vào tác nhân ssh đang chạy trong Mac Terminal, sau đó ssh-ing vào PC. Và sau đó, bạn đang tìm thấy SSH_AUTH_SOCK null trong PC của mình trong cùng một vỏ? Trong trường hợp đó, chuyển tiếp đại lý có thể không hoạt động tốt. Thử thêm tham số "-A" khi bạn ssh-ing vào PC. Nếu nó vẫn không hoạt động, chuyển tiếp tác nhân có thể bị vô hiệu hóa trong máy chủ ssh trong PC của bạn. Thay đổi cấu hình ở đó và khởi động lại sshd. Hãy thử làm ssh một lần nữa và xem.
Sandip Bhattacharya

Tôi đang sshing từ ứng dụng của mình trên cùng một máy (máy khách Mac) nơi tôi đã thêm khóa vào đại lý ssh. YEs thì đường dẫn SSH_AUTH_SOCK là NULL. Tôi đã thử từ thiết bị đầu cuối mac của tôi và chuyển tiếp đại lý đang hoạt động. Tôi đã sao chép khóa publick sang PC Mac (Thứ hai) khác của tôi và cố gắng ssh từ máy khách Mac của tôi (Đầu tiên) và nó đã được thực hiện mà không yêu cầu tôi mật khẩu của khóa đó có nghĩa là chuyển tiếp tác nhân đang hoạt động. Nhưng một số từ ứng dụng có thể là dòng chảy của tôi là sai hoặc nếu không tôi không có lý do chính xác.
Niks
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.