libssh2 - Переадресация агента не работает

558
Niks

Я использую libssh2библиотеку для подключения SSH в моем мобильном приложении. Здесь я хочу использовать Agent Forwardingподдержку.

Я следовал той же процедуре, что и в примере, приведенном здесь. Переадресация агента LibSSH2 .

Я могу успешно создать агента, но когда я пытаюсь подключиться к нему, libssh2_agent_connect(agent)он выдает ошибку -39 LIBSSH2_ERROR_BAD_USE .

Ну, я проверяю то же самое с помощью терминала MAC OSX, и он работает нормально. Пожалуйста, предложите, если что-то не так,

Вот как я пытаюсь однажды сделать успешное соединение

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; } 

Здесь что-то не так? пожалуйста, предложите.

2
Есть ли у вас какие-либо ошибки или подробный вывод. «не работает» - это достаточно широкое определение. Jakuje 9 лет назад 0
о, извините, я пропустил ту часть, отредактированную сейчас в вопросе, также упоминаю здесь. когда я пытаюсь соединить его с libssh2_agent_connect (agent), он выдает ошибку -39 LIBSSH2_ERROR_BAD_USE. Niks 9 лет назад 0
просто наверняка. У вас работает агент? Jakuje 9 лет назад 0
Да, это работает. Я могу ssh без перефразировать запрос / ввод, когда я пытаюсь ssh с моей другой машины, где я скопировал открытый ключ, который я добавил к агенту. Niks 9 лет назад 0
@Jakuje есть идеи? Niks 9 лет назад 0
Я вижу, агент работает. Где вы добавляете ключи к агенту? Jakuje 9 лет назад 0
Я добавил ключи из моего терминала Mac. Я пытаюсь из моего приложения для iOS с библиотекой libssh2. С libssh2 я не могу связаться с агентом Niks 9 лет назад 0
да, я понимаю, но как вы добавляете ключи в iOS-приложение? Jakuje 9 лет назад 0
при подключении к серверу я использую ключ как `const char * privatekey = [_privateKey cStringUsingEncoding: NSUTF8StringEncoding]; libssh2_userauth_publickey_fromfile (сеанс, имя пользователя, NULL, privatekey, пароль); `после успешного подключения я пытаюсь подключить агент с этим сеансом и тем же пользователем. Niks 9 лет назад 0

1 ответ на вопрос

1
Sandip Bhattacharya

Из кода на 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"); 

Очевидно, эта ошибка возникает из-за того, что переменная окружения, указывающая на сокет агента, установлена ​​неправильно. Ваш код должен напечатать значение getenv("SSH_AUTH_SOCK")в случае ошибки, чтобы подтвердить это.

Спасибо за отзыв, Да путь NULL переменной. Мой SSH-клиент - Mac OSX. Может ли быть какая-то разница с Unix? То, что я делаю, это сначала соединяюсь с моим ПК, затем я начинаю соединяться с агентом с тем же пользователем и сеансом. Я могу создать агента, но не могу подключиться. Поскольку я получаю значение NULL для пути переменной среды, не могли бы вы подсказать, что может быть неправильным, ИЛИ я иду с неверным потоком? Спасибо Niks 9 лет назад 0
Просто чтобы прояснить еще раз, у вас есть ключи на вашем Mac-клиенте, вы добавляете ключи к ssh-агенту, запущенному в вашем Mac-терминале, а затем подключаетесь к ПК по ssh. А потом вы находите свой SSH_AUTH_SOCK нуль на вашем ПК в той же оболочке? В этом случае переадресация агента, вероятно, не работает должным образом. Попытка добавить параметр "-A", когда вы подключаетесь к ПК. Если это все еще не работает, переадресация агента, вероятно, отключена на сервере ssh на вашем ПК. Измените там конфиг и перезапустите sshd. Попробуйте сделать ssh снова и посмотрите. Sandip Bhattacharya 9 лет назад 0
Я sshing из моего приложения на той же машине (клиент Mac), где я добавил ключ к агенту ssh. ДА, тогда путь SSH_AUTH_SOCK равен NULL. Я попытался с моего терминала Mac, и переадресация агента работает. Я скопировал открытый ключ на другой (второй) компьютер Mac и попытался выполнить ssh с клиента «Мой Mac» (первый), и это было сделано, не спрашивая у меня парольную фразу этого ключа, что означает, что переадресация агента работает. Но некоторые из приложения могут быть ошибочными, или я не получаю точную причину. Niks 9 лет назад 0