Sample code for 30+ languages & platforms
Lua 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 Lua Downloads

Lua
local chilkat = require("chilkat")

-- 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.
local key = chilkat.SshKey.new()
key.password = "key_password"

local success = key:from_open_ssh_private_key(key:load_text("qa_data/my_private_key_file"))
if not success then
    print(key.last_error_text)
    return
end

local sftp = chilkat.SFtp.new()

success = sftp:connect("sftp.example.com", 22)
if not success then
    print(sftp.last_error_text)
    return
end

-- Authenticate using both a password and private key.
success = sftp:authenticate_pw_pk("myLogin", "myPassword", key)
if success then
    print("Authentication is successful!")
    return
end

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

local json = chilkat.JsonObject.new()
sftp:get_last_json_data(json)

json.emit_compact = 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:string_of("authResult"))
print("authFailReason: " .. json:string_of("authFailReason"))