Sample code for 30+ languages & platforms
Dart Requires Chilkat v11.0.0+

SFTP Auth Failure Reason (AuthenticatePwPk)

See more SFTP Examples

This example demonstrates how to determine the failure reason for the case where both a password and private key are required for authentication. If authentication fails, was it because of an invalid private key, or an invalid password?

Chilkat Dart Downloads

Dart
import 'package:chilkat/chilkat.dart';

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

  // Load a private key to be used for SSH authentication.
  final key = CkSshKey();
  key.password = 'key_password';

  try {
    key.fromOpenSshPrivateKey(key.loadText('qa_data/my_private_key_file'));
  } on ChilkatException catch (e) {
    print(e.lastErrorText);
    return;
  }

  final sftp = CkSFtp();

  try {
    sftp.connect('sftp.example.com', 22);
  } on ChilkatException catch (e) {
    print(e.lastErrorText);
    return;
  }

  // Authenticate using both a password and private key.
  try {
    sftp.authenticatePwPk('myLogin', 'myPassword', key);
    print('Authentication is successful!');
    return;
  } on ChilkatException {
    // sftp.authenticatePwPk() failed; continue anyway.
  }

  // If we get here, it means the authentication failed.
  // Examine the last JSON data..

  final json = CkJsonObject();
  sftp.getLastJsonData(json);

  json.emitCompact = false;

  // This is the JSON if the key is correct, but the password is incorrect:

  // {
  //   "public_key_type": "rsa",
  //   "partialAuthResult": "publickey success. continue to authenticate with password...",
  //   "authResult": "failed",
  //   "authFailReason": "Password is incorrect"
  // }

  // This is the JSON if the key is incorrect.  We won't know if the password is also incorrect until
  // the key is made correct so that authentication proceeds to check the password.

  // {
  //   "public_key_type": "rsa",
  //   "authResult": "failed",
  //   "authFailReason": "Key is incorrect"
  // }

  // To get the authResult anbd authFailReason:
  print('authResult: ${json.stringOf('authResult')}');
  print('authFailReason: ${json.stringOf('authFailReason')}');
}