Tcl
Tcl
SSH Keyboard Authentication
See more SSH Examples
Demonstrates how to implement keyboard authentication with an SSH server.Chilkat Tcl Downloads
load ./chilkat.dll
set success 0
# This example assumes the Chilkat API to have been previously unlocked.
# See Global Unlock Sample for sample code.
set ssh [new_CkSsh]
# Set some timeouts, in milliseconds:
CkSsh_put_ConnectTimeoutMs $ssh 5000
CkSsh_put_IdleTimeoutMs $ssh 15000
# Connect to the SSH server.
# The standard SSH port = 22
# The hostname may be a hostname or IP address.
set hostname "sftp.example.com"
set port 22
set success [CkSsh_Connect $ssh $hostname $port]
if {$success != 1} then {
puts [CkSsh_lastErrorText $ssh]
delete_CkSsh $ssh
exit
}
# Begin keyboard authentication..
set xmlResponse [CkSsh_startKeyboardAuth $ssh "myLogin"]
if {[CkSsh_get_LastMethodSuccess $ssh] != 1} then {
puts [CkSsh_lastErrorText $ssh]
delete_CkSsh $ssh
exit
}
# If a user authentication banner was received, then your app
# may display it prior to prompting for the password.
puts "UserAuthBanner: [CkSsh_userAuthBanner $ssh]"
set xml [new_CkXml]
set success [CkXml_LoadXml $xml $xmlResponse]
# Assume LoadXml succeeds for the example..
if {[CkXml_HasChildWithTag $xml "success"] == 1} then {
puts "No password required, already authenticated."
delete_CkSsh $ssh
delete_CkXml $xml
exit
}
if {[CkXml_HasChildWithTag $xml "error"] == 1} then {
puts "Authentication already failed."
delete_CkSsh $ssh
delete_CkXml $xml
exit
}
# 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.
set xmlResponse [CkSsh_continueKeyboardAuth $ssh "myPassword"]
if {[CkSsh_get_LastMethodSuccess $ssh] != 1} then {
puts [CkSsh_lastErrorText $ssh]
delete_CkSsh $ssh
delete_CkXml $xml
exit
}
set success [CkXml_LoadXml $xml $xmlResponse]
# Assume LoadXml succeeds for the example..
if {[CkXml_HasChildWithTag $xml "success"] == 1} then {
puts "SSH Keyboard Authentication Successful!"
delete_CkSsh $ssh
delete_CkXml $xml
exit
}
if {[CkXml_HasChildWithTag $xml "error"] == 1} then {
puts "Authentication failed."
delete_CkSsh $ssh
delete_CkXml $xml
exit
}
delete_CkSsh $ssh
delete_CkXml $xml