---
name: "libssh2_userauth_keyboard_interactive_ex"
section: "3"
platform: "linux"
package: "libssh2"
version: "1.11.1-7"
release: "Arch Linux 2026-11-01"
platforms: ["linux"]
url: "https://new.carta.tech/libssh2_userauth_keyboard_interactive_ex"
---

# libssh2\_userauth\_keyboard\_interactive\_ex(3)

authenticate a session using keyboard-interactive authentication

## NAME

libssh2\_userauth\_keyboard\_interactive\_ex - authenticate a session using keyboard-interactive authentication

## SYNOPSIS

```
#include <libssh2.h>
int
libssh2_userauth_keyboard_interactive_ex(LIBSSH2_SESSION *session,
                                         const char *username,
                                         unsigned int username_len,
                   LIBSSH2_USERAUTH_KBDINT_RESPONSE_FUNC(*response_callback));
```

## DESCRIPTION

*session* - Session instance as returned by *[libssh2\_session\_init\_ex(3)](/libssh2_session_init_ex/3.md)*.

*username* - Name of user to attempt keyboard-interactive authentication for.

*username\_len* - Length of username parameter.

*response\_callback* - As authentication proceeds, the host issues several (1 or more) challenges and requires responses. This callback will be called at this moment. The callback is responsible to obtain responses for the challenges, fill the provided data structure and then return control. Responses will be sent to the host. String values will be [free(3)](/free/3.md)ed by the library. The callback prototype must match this:

```
void response(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);
```

Attempts keyboard-interactive (challenge/response) authentication.

Note that many SSH servers will always issue a single "password" challenge, requesting actual password as response, but it is not required by the protocol, and various authentication schemes, such as smartcard authentication may use keyboard-interactive authentication type too.

## RETURN VALUE

Return 0 on success or negative on failure. It returns LIBSSH2\_ERROR\_EAGAIN when it would otherwise block. While LIBSSH2\_ERROR\_EAGAIN is a negative number, it is not really a failure per se.

## ERRORS

*LIBSSH2\_ERROR\_ALLOC* - An internal memory allocation call failed.

*LIBSSH2\_ERROR\_SOCKET\_SEND* - Unable to send data on socket.

*LIBSSH2\_ERROR\_AUTHENTICATION\_FAILED* - failed, invalid username/password or public/private key.

## SEE ALSO

**[libssh2\_session\_init\_ex(3)](/libssh2_session_init_ex/3.md)**
