C
C
SSH Keyboard Authentication
See more SSH Examples
Demonstrates how to implement keyboard authentication with an SSH server.Chilkat C Downloads
#include <C_CkSsh.h>
#include <C_CkXml.h>
void ChilkatSample(void)
{
BOOL success;
HCkSsh ssh;
const char *hostname;
int port;
const char *xmlResponse;
HCkXml xml;
success = FALSE;
// This example assumes the Chilkat API to have been previously unlocked.
// See Global Unlock Sample for sample code.
ssh = CkSsh_Create();
// Set some timeouts, in milliseconds:
CkSsh_putConnectTimeoutMs(ssh,5000);
CkSsh_putIdleTimeoutMs(ssh,15000);
// Connect to the SSH server.
// The standard SSH port = 22
// The hostname may be a hostname or IP address.
hostname = "sftp.example.com";
port = 22;
success = CkSsh_Connect(ssh,hostname,port);
if (success != TRUE) {
printf("%s\n",CkSsh_lastErrorText(ssh));
CkSsh_Dispose(ssh);
return;
}
// Begin keyboard authentication..
xmlResponse = CkSsh_startKeyboardAuth(ssh,"myLogin");
if (CkSsh_getLastMethodSuccess(ssh) != TRUE) {
printf("%s\n",CkSsh_lastErrorText(ssh));
CkSsh_Dispose(ssh);
return;
}
// If a user authentication banner was received, then your app
// may display it prior to prompting for the password.
printf("UserAuthBanner: %s\n",CkSsh_userAuthBanner(ssh));
xml = CkXml_Create();
success = CkXml_LoadXml(xml,xmlResponse);
// Assume LoadXml succeeds for the example..
if (CkXml_HasChildWithTag(xml,"success") == TRUE) {
printf("No password required, already authenticated.\n");
CkSsh_Dispose(ssh);
CkXml_Dispose(xml);
return;
}
if (CkXml_HasChildWithTag(xml,"error") == TRUE) {
printf("Authentication already failed.\n");
CkSsh_Dispose(ssh);
CkXml_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 = CkSsh_continueKeyboardAuth(ssh,"myPassword");
if (CkSsh_getLastMethodSuccess(ssh) != TRUE) {
printf("%s\n",CkSsh_lastErrorText(ssh));
CkSsh_Dispose(ssh);
CkXml_Dispose(xml);
return;
}
success = CkXml_LoadXml(xml,xmlResponse);
// Assume LoadXml succeeds for the example..
if (CkXml_HasChildWithTag(xml,"success") == TRUE) {
printf("SSH Keyboard Authentication Successful!\n");
CkSsh_Dispose(ssh);
CkXml_Dispose(xml);
return;
}
if (CkXml_HasChildWithTag(xml,"error") == TRUE) {
printf("Authentication failed.\n");
CkSsh_Dispose(ssh);
CkXml_Dispose(xml);
return;
}
CkSsh_Dispose(ssh);
CkXml_Dispose(xml);
}