objective-c - SSH 键盘交互认证

标签 objective-c ios authentication libssh2

我目前尝试在 Objective-C 中扩展 libssh2 Wrapper。

我正在尝试实现 libssh2_userauth_keyboard_interactive 方法。我的问题是响应回调。

我在网上发现了这个绕过“真实”交互并使用实际密码使身份验证成为可能的实现:

int error = libssh2_userauth_keyboard_interactive(session, [username UTF8String], &kbdCallback);

static void kbdCallback (const char *name, int name_len, const char *instruction, int instruction_len, int num_prompts, const LIBSSH2_USERAUTH_KBDINT_PROMPT *prompts, LIBSSH2_USERAUTH_KBDINT_RESPONSE *responses, void **abstract)
{
    responses[0].text = (char *)[password UTF8String];   // resp. (char *)[@"test" UTF8String]
    responses[0].length = strlen([password UTF8String]); // resp. (char *)[@"test" UTF8String]
}

我的一个问题是在 static void 调用中访问实例变量 password 而我的另一个问题是当我尝试调用该方法时收到 SIGABRT (我使用固定字符串来测试它是否有效)。

有没有可能让它发挥作用?!

朱利安

最佳答案

kbdCallback 实际上不是一个方法,它是一个函数 - 你可以说出几种方法 - 前面没有 -+其中,返回类型周围没有括号,方法也不能是 static。因此,由于它是一个函数而不是一个方法,因此没有与之关联的对象,也没有 self 指针;因此你不能直接访问任何实例变量。我想有几种方法可以解决这个问题;您可以拥有对象的静态实例,该函数可以从中获取密码,或者如果有某种方法可以传递要在回调中使用的上下文指针,您可能能够以这种方式传递对象。

关于您的SIGABRT,您能否说出具体发生在哪一行,以及您使用的参数值是多少?从你的问题中不清楚。

关于objective-c - SSH 键盘交互认证,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12773258/

相关文章:

objective-c - iOS 4.3和iOS 5.0之间的iOS核心数据API有哪些更改?在哪里可以找到它们?

ios - fatal error : Use of unimplemented initializer 'init()' for class Swift

ios - 循环中的 NSRangeException

ios - 从一个 VC 到另一个 VC 但在那之后一切都挂了

ios - 在 Core Data 中更改 NSOrderedSet 顺序的尝试和磨难

iphone - 在 iPhone 的 Library 目录中创建文件

具有完整 URI 和方案的 Java httpClient 4.3.6 基本身份验证

ruby-on-rails - Rails Postgres 不断告诉我用户不存在

php - 注册php文件

objective-c - 缓存 NSView 上下文