Unicode C
Unicode C
SSH Authentication using an SSH Certificate
See more SSH Examples
Demonstrates how to authenticate using an SSH certificate.Chilkat Unicode C Downloads
#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);
}