Sample code for 30+ languages & platforms
Swift

SSH Keyboard Authentication

See more SSH Examples

Demonstrates how to implement keyboard authentication with an SSH server.

Chilkat Swift Downloads

Swift

func chilkatTest() {
    var success: Bool = false

    // This example assumes the Chilkat API to have been previously unlocked.
    // See Global Unlock Sample for sample code.

    let ssh = CkoSsh()!

    // Set some timeouts, in milliseconds:
    ssh.connectTimeoutMs = 5000
    ssh.idleTimeoutMs = 15000

    // Connect to the SSH server.  
    // The standard SSH port = 22
    // The hostname may be a hostname or IP address.
    var hostname: String? = "sftp.example.com"
    var port: Int = 22
    success = ssh.connect(hostname: hostname, port: port)
    if success != true {
        print("\(ssh.lastErrorText!)")
        return
    }

    // Begin keyboard authentication..
    var xmlResponse: String? = ssh.startKeyboardAuth(login: "myLogin")
    if ssh.lastMethodSuccess != true {
        print("\(ssh.lastErrorText!)")
        return
    }

    // If a user authentication banner was received, then your app
    // may display it prior to prompting for the password.
    print("UserAuthBanner: \(ssh.userAuthBanner!)")

    let xml = CkoXml()!

    success = xml.load(xmlData: xmlResponse)
    // Assume LoadXml succeeds for the example..
    if xml.hasChild(withTag: "success") == true {
        print("No password required, already authenticated.")
        return
    }

    if xml.hasChild(withTag: "error") == true {
        print("Authentication already failed.")
        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 = ssh.continueKeyboardAuth(response: "myPassword")
    if ssh.lastMethodSuccess != true {
        print("\(ssh.lastErrorText!)")
        return
    }

    success = xml.load(xmlData: xmlResponse)
    // Assume LoadXml succeeds for the example..
    if xml.hasChild(withTag: "success") == true {
        print("SSH Keyboard Authentication Successful!")
        return
    }

    if xml.hasChild(withTag: "error") == true {
        print("Authentication failed.")
        return
    }


}