Sample code for 30+ languages & platforms
Unicode 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 Unicode C Downloads

Unicode C
#include <C_CkSshW.h>

void ChilkatSample(void)
    {
    BOOL success;
    HCkSshW ssh;
    int port;
    const wchar_t *authMethods;
    const wchar_t *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 = CkSshW_Create();

    port = 22;

    //  The server must be connected, but not yet authenticated.
    success = CkSshW_Connect(ssh,L"ssh.example.com",port);
    if (success == FALSE) {
        wprintf(L"%s\n",CkSshW_lastErrorText(ssh));
        CkSshW_Dispose(ssh);
        return;
    }

    //  Returns a lowercase, comma-separated list, such as:
    //      publickey,password,keyboard-interactive
    authMethods = CkSshW_getAuthMethods(ssh);
    if (CkSshW_getLastMethodSuccess(ssh) == FALSE) {
        wprintf(L"%s\n",CkSshW_lastErrorText(ssh));
        CkSshW_Dispose(ssh);
        return;
    }

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

    //  IMPORTANT: Querying the authentication methods intentionally disconnects from the server.
    //  Reconnect before authenticating.
    success = CkSshW_Connect(ssh,L"ssh.example.com",port);
    if (success == FALSE) {
        wprintf(L"%s\n",CkSshW_lastErrorText(ssh));
        CkSshW_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 = L"mySshPassword";

    success = CkSshW_AuthenticatePw(ssh,L"mySshLogin",password);
    if (success == FALSE) {
        wprintf(L"%s\n",CkSshW_lastErrorText(ssh));
        CkSshW_Dispose(ssh);
        return;
    }

    wprintf(L"SSH authentication successful.\n");

    CkSshW_Disconnect(ssh);


    CkSshW_Dispose(ssh);

    }