Sample code for 30+ languages & platforms
Objective-C

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 Objective-C Downloads

Objective-C
#import <CkoSsh.h>
#import <NSString.h>

BOOL success = NO;

//  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.

CkoSsh *ssh = [[CkoSsh alloc] init];

int port = 22;

//  The server must be connected, but not yet authenticated.
success = [ssh Connect: @"ssh.example.com" port: [NSNumber numberWithInt: port]];
if (success == NO) {
    NSLog(@"%@",ssh.LastErrorText);
    return;
}

//  Returns a lowercase, comma-separated list, such as:
//      publickey,password,keyboard-interactive
NSString *authMethods = [ssh GetAuthMethods];
if (ssh.LastMethodSuccess == NO) {
    NSLog(@"%@",ssh.LastErrorText);
    return;
}

NSLog(@"%@%@",@"Authentication methods supported by this server: ",authMethods);

//  IMPORTANT: Querying the authentication methods intentionally disconnects from the server.
//  Reconnect before authenticating.
success = [ssh Connect: @"ssh.example.com" port: [NSNumber numberWithInt: port]];
if (success == NO) {
    NSLog(@"%@",ssh.LastErrorText);
    return;
}

//  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.
NSString *password = @"mySshPassword";

success = [ssh AuthenticatePw: @"mySshLogin" password: password];
if (success == NO) {
    NSLog(@"%@",ssh.LastErrorText);
    return;
}

NSLog(@"%@",@"SSH authentication successful.");

[ssh Disconnect];