Sample code for 30+ languages & platforms
C

Get SSH Server Authentication Methods

See more SSH Examples

Demonstrates getting the authentication methods advertised by an SSH server. Connect first but do not authenticate, then call GetAuthMethods, which returns a lowercase, comma-separated list such as publickey,password,keyboard-interactive.

Important: Querying the authentication methods intentionally disconnects from the server, so reconnect before authenticating.

Background: Knowing what a server accepts lets a client choose the right authentication path rather than guessing — for example, falling back to keyboard-interactive when password authentication is not offered, or failing fast with a clear message when only public-key is allowed. It is also useful diagnostically when authentication fails for reasons that are not obvious from the error text.

Chilkat C Downloads

C
#include <C_CkSsh.h>

void ChilkatSample(void)
    {
    BOOL success;
    HCkSsh ssh;
    int port;
    const char *authMethods;
    const char *password;

    success = FALSE;

    //  This example requires the Chilkat API to have been previously unlocked.
    //  See Global Unlock Sample for sample code.

    //  Demonstrates getting the authentication methods advertised by an SSH server.

    ssh = CkSsh_Create();

    port = 22;

    //  The server must be connected, but not yet authenticated.
    success = CkSsh_Connect(ssh,"ssh.example.com",port);
    if (success == FALSE) {
        printf("%s\n",CkSsh_lastErrorText(ssh));
        CkSsh_Dispose(ssh);
        return;
    }

    //  Returns a lowercase, comma-separated list, such as:
    //      publickey,password,keyboard-interactive
    authMethods = CkSsh_getAuthMethods(ssh);
    if (CkSsh_getLastMethodSuccess(ssh) == FALSE) {
        printf("%s\n",CkSsh_lastErrorText(ssh));
        CkSsh_Dispose(ssh);
        return;
    }

    printf("Authentication methods supported by this server: %s\n",authMethods);

    //  IMPORTANT: Querying the authentication methods intentionally disconnects from the server.
    //  Reconnect before authenticating.
    success = CkSsh_Connect(ssh,"ssh.example.com",port);
    if (success == FALSE) {
        printf("%s\n",CkSsh_lastErrorText(ssh));
        CkSsh_Dispose(ssh);
        return;
    }

    //  Normally you would not hard-code the password in source.  You should instead obtain it
    //  from an interactive prompt, environment variable, or a secrets vault.
    password = "mySshPassword";

    success = CkSsh_AuthenticatePw(ssh,"mySshLogin",password);
    if (success == FALSE) {
        printf("%s\n",CkSsh_lastErrorText(ssh));
        CkSsh_Dispose(ssh);
        return;
    }

    printf("SSH authentication successful.\n");

    CkSsh_Disconnect(ssh);


    CkSsh_Dispose(ssh);

    }