Unicode C
Unicode C
SSH Keyboard Authentication
See more SSH Examples
Demonstrates how to implement keyboard authentication with an SSH server.Chilkat Unicode C Downloads
#include <C_CkSshW.h>
#include <C_CkXmlW.h>
void ChilkatSample(void)
{
BOOL success;
HCkSshW ssh;
const wchar_t *hostname;
int port;
const wchar_t *xmlResponse;
HCkXmlW xml;
success = FALSE;
// This example assumes the Chilkat API to have been previously unlocked.
// See Global Unlock Sample for sample code.
ssh = CkSshW_Create();
// Set some timeouts, in milliseconds:
CkSshW_putConnectTimeoutMs(ssh,5000);
CkSshW_putIdleTimeoutMs(ssh,15000);
// Connect to the SSH server.
// The standard SSH port = 22
// The hostname may be a hostname or IP address.
hostname = L"sftp.example.com";
port = 22;
success = CkSshW_Connect(ssh,hostname,port);
if (success != TRUE) {
wprintf(L"%s\n",CkSshW_lastErrorText(ssh));
CkSshW_Dispose(ssh);
return;
}
// Begin keyboard authentication..
xmlResponse = CkSshW_startKeyboardAuth(ssh,L"myLogin");
if (CkSshW_getLastMethodSuccess(ssh) != TRUE) {
wprintf(L"%s\n",CkSshW_lastErrorText(ssh));
CkSshW_Dispose(ssh);
return;
}
// If a user authentication banner was received, then your app
// may display it prior to prompting for the password.
wprintf(L"UserAuthBanner: %s\n",CkSshW_userAuthBanner(ssh));
xml = CkXmlW_Create();
success = CkXmlW_LoadXml(xml,xmlResponse);
// Assume LoadXml succeeds for the example..
if (CkXmlW_HasChildWithTag(xml,L"success") == TRUE) {
wprintf(L"No password required, already authenticated.\n");
CkSshW_Dispose(ssh);
CkXmlW_Dispose(xml);
return;
}
if (CkXmlW_HasChildWithTag(xml,L"error") == TRUE) {
wprintf(L"Authentication already failed.\n");
CkSshW_Dispose(ssh);
CkXmlW_Dispose(xml);
return;
}
// See the online reference documentation for Chilkat SSH.
// The XML returned by StartKeyboardAuth will contain an infoRequest
// with one or more prompts that your application may choose to display.
// Call ContinueKeyboardAuth, passing in the whatever information is requires (such as the password).
// Typically, keyboard authentication requires one call to ContinueKeyboardAuth
// using the password. Theoretically, the SSH server could prompt for additional pieces
// of information. The authentication is completed when the XML returned contains
// either a "success" or "error" child node.
// This example asumes only one call to ContinueKeyboardAuth is required.
xmlResponse = CkSshW_continueKeyboardAuth(ssh,L"myPassword");
if (CkSshW_getLastMethodSuccess(ssh) != TRUE) {
wprintf(L"%s\n",CkSshW_lastErrorText(ssh));
CkSshW_Dispose(ssh);
CkXmlW_Dispose(xml);
return;
}
success = CkXmlW_LoadXml(xml,xmlResponse);
// Assume LoadXml succeeds for the example..
if (CkXmlW_HasChildWithTag(xml,L"success") == TRUE) {
wprintf(L"SSH Keyboard Authentication Successful!\n");
CkSshW_Dispose(ssh);
CkXmlW_Dispose(xml);
return;
}
if (CkXmlW_HasChildWithTag(xml,L"error") == TRUE) {
wprintf(L"Authentication failed.\n");
CkSshW_Dispose(ssh);
CkXmlW_Dispose(xml);
return;
}
CkSshW_Dispose(ssh);
CkXmlW_Dispose(xml);
}