Sample code for 30+ languages & platforms
Xbase++

Get SSH Server Authentication Methods

See more SSH Examples

Demonstrates getting the authentication methods advertised by an SSH server. Connect first but do not authenticate, then call GetAuthMethods, which returns a lowercase, comma-separated list such as publickey,password,keyboard-interactive.

Important: Querying the authentication methods intentionally disconnects from the server, so reconnect before authenticating.

Background: Knowing what a server accepts lets a client choose the right authentication path rather than guessing — for example, falling back to keyboard-interactive when password authentication is not offered, or failing fast with a clear message when only public-key is allowed. It is also useful diagnostically when authentication fails for reasons that are not obvious from the error text.

Chilkat Xbase++ Downloads

Xbase++
LOCAL nSuccess
LOCAL oSsh
LOCAL nPort
LOCAL cAuthMethods
LOCAL cPassword

nSuccess := 0

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

//  Demonstrates getting the authentication methods advertised by an SSH server.

oSsh := CreateObject("Chilkat.Ssh")

nPort := 22

//  The server must be connected, but not yet authenticated.
nSuccess := oSsh:Connect("ssh.example.com", nPort)
IF (nSuccess == 0)
    ? oSsh:LastErrorText
    oSsh:destroy()
    RETURN
ENDIF

//  Returns a lowercase, comma-separated list, such as:
//      publickey,password,keyboard-interactive
cAuthMethods := oSsh:GetAuthMethods()
IF (oSsh:LastMethodSuccess == 0)
    ? oSsh:LastErrorText
    oSsh:destroy()
    RETURN
ENDIF

? "Authentication methods supported by this server: " + cAuthMethods

//  IMPORTANT: Querying the authentication methods intentionally disconnects from the server.
//  Reconnect before authenticating.
nSuccess := oSsh:Connect("ssh.example.com", nPort)
IF (nSuccess == 0)
    ? oSsh:LastErrorText
    oSsh:destroy()
    RETURN
ENDIF

//  Normally you would not hard-code the password in source.  You should instead obtain it
//  from an interactive prompt, environment variable, or a secrets vault.
cPassword := "mySshPassword"

nSuccess := oSsh:AuthenticatePw("mySshLogin", cPassword)
IF (nSuccess == 0)
    ? oSsh:LastErrorText
    oSsh:destroy()
    RETURN
ENDIF

? "SSH authentication successful."

oSsh:Disconnect()

oSsh:destroy()