Sample code for 30+ languages & platforms
Unicode C

SSH Authentication using an SSH Certificate

See more SSH Examples

Demonstrates how to authenticate using an SSH certificate.

Chilkat Unicode C Downloads

Unicode C
#include <C_CkStringBuilderW.h>
#include <C_CkSshKeyW.h>
#include <C_CkSshW.h>

void ChilkatSample(void)
    {
    BOOL success;
    HCkStringBuilderW sbSshCert;
    HCkStringBuilderW sbPrivKey;
    HCkSshKeyW key;
    HCkSshW ssh;
    const wchar_t *hostname;
    int port;

    success = FALSE;

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

    sbSshCert = CkStringBuilderW_Create();
    success = CkStringBuilderW_LoadFile(sbSshCert,L"qa_data/sshCert/user_ecdsa_key-cert.pub",L"utf-8");
    if (success == FALSE) {
        wprintf(L"Failed to load user_ecdsa_key-cert.pub\n");
        CkStringBuilderW_Dispose(sbSshCert);
        return;
    }

    sbPrivKey = CkStringBuilderW_Create();
    success = CkStringBuilderW_LoadFile(sbPrivKey,L"qa_data/sshKeys/user_ecdsa_key",L"utf-8");
    if (success == FALSE) {
        wprintf(L"Failed to load user_ecdsa_key\n");
        CkStringBuilderW_Dispose(sbSshCert);
        CkStringBuilderW_Dispose(sbPrivKey);
        return;
    }

    key = CkSshKeyW_Create();
    // Provide the password if the user_ecdsa_key is stored in an encrypted format.
    CkSshKeyW_putPassword(key,L"secret");
    success = CkSshKeyW_FromOpenSshPrivateKey(key,CkStringBuilderW_getAsString(sbPrivKey));
    if (success == FALSE) {
        wprintf(L"%s\n",CkSshKeyW_lastErrorText(key));
        CkStringBuilderW_Dispose(sbSshCert);
        CkStringBuilderW_Dispose(sbPrivKey);
        CkSshKeyW_Dispose(key);
        return;
    }

    // Indicate that the SSH certificate is to be used for authentication.
    // The UseSshCertificate method was added in Chilkat v11.0.0
    CkSshKeyW_UseSshCertificate(key,CkStringBuilderW_getAsString(sbSshCert));

    ssh = CkSshW_Create();

    hostname = L"ssh.example.com";
    port = 22;
    success = CkSshW_Connect(ssh,hostname,port);
    if (success != TRUE) {
        wprintf(L"%s\n",CkSshW_lastErrorText(ssh));
        CkStringBuilderW_Dispose(sbSshCert);
        CkStringBuilderW_Dispose(sbPrivKey);
        CkSshKeyW_Dispose(key);
        CkSshW_Dispose(ssh);
        return;
    }

    success = CkSshW_AuthenticatePk(ssh,L"myLogin",key);
    if (success != TRUE) {
        wprintf(L"%s\n",CkSshW_lastErrorText(ssh));
        CkStringBuilderW_Dispose(sbSshCert);
        CkStringBuilderW_Dispose(sbPrivKey);
        CkSshKeyW_Dispose(key);
        CkSshW_Dispose(ssh);
        return;
    }

    wprintf(L"Public-Key Authentication using an SSH Certificate was Successful!\n");


    CkStringBuilderW_Dispose(sbSshCert);
    CkStringBuilderW_Dispose(sbPrivKey);
    CkSshKeyW_Dispose(key);
    CkSshW_Dispose(ssh);

    }