Unicode C
Unicode C
SFTP Authentication using an SSH Certificate
See more SFTP Examples
Demonstrates how to SFTP authenticate using an SSH certificate.Chilkat Unicode C Downloads
#include <C_CkStringBuilderW.h>
#include <C_CkSshKeyW.h>
#include <C_CkSFtpW.h>
void ChilkatSample(void)
{
BOOL success;
HCkStringBuilderW sbSshCert;
HCkStringBuilderW sbPrivKey;
HCkSshKeyW key;
HCkSFtpW sftp;
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));
sftp = CkSFtpW_Create();
hostname = L"sftp.example.com";
port = 22;
success = CkSFtpW_Connect(sftp,hostname,port);
if (success != TRUE) {
wprintf(L"%s\n",CkSFtpW_lastErrorText(sftp));
CkStringBuilderW_Dispose(sbSshCert);
CkStringBuilderW_Dispose(sbPrivKey);
CkSshKeyW_Dispose(key);
CkSFtpW_Dispose(sftp);
return;
}
success = CkSFtpW_AuthenticatePk(sftp,L"myLogin",key);
if (success != TRUE) {
wprintf(L"%s\n",CkSFtpW_lastErrorText(sftp));
CkStringBuilderW_Dispose(sbSshCert);
CkStringBuilderW_Dispose(sbPrivKey);
CkSshKeyW_Dispose(key);
CkSFtpW_Dispose(sftp);
return;
}
wprintf(L"Public-Key Authentication using an SSH Certificate was Successful!\n");
CkStringBuilderW_Dispose(sbSshCert);
CkStringBuilderW_Dispose(sbPrivKey);
CkSshKeyW_Dispose(key);
CkSFtpW_Dispose(sftp);
}