PureBasic
PureBasic
SSH Keyboard Authentication
See more SSH Examples
Demonstrates how to implement keyboard authentication with an SSH server.Chilkat PureBasic Downloads
IncludeFile "CkSsh.pb"
IncludeFile "CkXml.pb"
Procedure ChilkatExample()
success.i = 0
; This example assumes the Chilkat API to have been previously unlocked.
; See Global Unlock Sample for sample code.
ssh.i = CkSsh::ckCreate()
If ssh.i = 0
Debug "Failed to create object."
ProcedureReturn
EndIf
; Set some timeouts, in milliseconds:
CkSsh::setCkConnectTimeoutMs(ssh, 5000)
CkSsh::setCkIdleTimeoutMs(ssh, 15000)
; Connect to the SSH server.
; The standard SSH port = 22
; The hostname may be a hostname or IP address.
hostname.s = "sftp.example.com"
port.i = 22
success = CkSsh::ckConnect(ssh,hostname,port)
If success <> 1
Debug CkSsh::ckLastErrorText(ssh)
CkSsh::ckDispose(ssh)
ProcedureReturn
EndIf
; Begin keyboard authentication..
xmlResponse.s = CkSsh::ckStartKeyboardAuth(ssh,"myLogin")
If CkSsh::ckLastMethodSuccess(ssh) <> 1
Debug CkSsh::ckLastErrorText(ssh)
CkSsh::ckDispose(ssh)
ProcedureReturn
EndIf
; If a user authentication banner was received, then your app
; may display it prior to prompting for the password.
Debug "UserAuthBanner: " + CkSsh::ckUserAuthBanner(ssh)
xml.i = CkXml::ckCreate()
If xml.i = 0
Debug "Failed to create object."
ProcedureReturn
EndIf
success = CkXml::ckLoadXml(xml,xmlResponse)
; Assume LoadXml succeeds for the example..
If CkXml::ckHasChildWithTag(xml,"success") = 1
Debug "No password required, already authenticated."
CkSsh::ckDispose(ssh)
CkXml::ckDispose(xml)
ProcedureReturn
EndIf
If CkXml::ckHasChildWithTag(xml,"error") = 1
Debug "Authentication already failed."
CkSsh::ckDispose(ssh)
CkXml::ckDispose(xml)
ProcedureReturn
EndIf
; 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::ckContinueKeyboardAuth(ssh,"myPassword")
If CkSsh::ckLastMethodSuccess(ssh) <> 1
Debug CkSsh::ckLastErrorText(ssh)
CkSsh::ckDispose(ssh)
CkXml::ckDispose(xml)
ProcedureReturn
EndIf
success = CkXml::ckLoadXml(xml,xmlResponse)
; Assume LoadXml succeeds for the example..
If CkXml::ckHasChildWithTag(xml,"success") = 1
Debug "SSH Keyboard Authentication Successful!"
CkSsh::ckDispose(ssh)
CkXml::ckDispose(xml)
ProcedureReturn
EndIf
If CkXml::ckHasChildWithTag(xml,"error") = 1
Debug "Authentication failed."
CkSsh::ckDispose(ssh)
CkXml::ckDispose(xml)
ProcedureReturn
EndIf
CkSsh::ckDispose(ssh)
CkXml::ckDispose(xml)
ProcedureReturn
EndProcedure