Xbase++
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
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()