Sample code for 30+ languages & platforms
Go

SSH Keyboard Authentication

See more SSH Examples

Demonstrates how to implement keyboard authentication with an SSH server.

Chilkat Go Downloads

Go
    success := false

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

    ssh := chilkat.NewSsh()

    // Set some timeouts, in milliseconds:
    ssh.SetConnectTimeoutMs(5000)
    ssh.SetIdleTimeoutMs(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 = ssh.Connect(hostname,port)
    if success != true {
        fmt.Println(ssh.LastErrorText())
        ssh.DisposeSsh()
        return
    }

    // Begin keyboard authentication..
    xmlResponse := ssh.StartKeyboardAuth("myLogin")
    if ssh.LastMethodSuccess() != true {
        fmt.Println(ssh.LastErrorText())
        ssh.DisposeSsh()
        return
    }

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

    xml := chilkat.NewXml()

    success = xml.LoadXml(*xmlResponse)
    // Assume LoadXml succeeds for the example..
    if xml.HasChildWithTag("success") == true {
        fmt.Println("No password required, already authenticated.")
        ssh.DisposeSsh()
        xml.DisposeXml()
        return
    }

    if xml.HasChildWithTag("error") == true {
        fmt.Println("Authentication already failed.")
        ssh.DisposeSsh()
        xml.DisposeXml()
        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("myPassword")
    if ssh.LastMethodSuccess() != true {
        fmt.Println(ssh.LastErrorText())
        ssh.DisposeSsh()
        xml.DisposeXml()
        return
    }

    success = xml.LoadXml(*xmlResponse)
    // Assume LoadXml succeeds for the example..
    if xml.HasChildWithTag("success") == true {
        fmt.Println("SSH Keyboard Authentication Successful!")
        ssh.DisposeSsh()
        xml.DisposeXml()
        return
    }

    if xml.HasChildWithTag("error") == true {
        fmt.Println("Authentication failed.")
        ssh.DisposeSsh()
        xml.DisposeXml()
        return
    }


    ssh.DisposeSsh()
    xml.DisposeXml()