Sample code for 30+ languages & platforms
SQL Server

SSH Auth Failure Reason (AuthenticatePwPk)

See more SSH 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 SQL Server Downloads

SQL Server
-- Important: See this note about string length limitations for strings returned by sp_OAMethod calls.
--
CREATE PROCEDURE ChilkatSample
AS
BEGIN
    DECLARE @hr int
    -- Important: Do not use nvarchar(max).  See the warning about using nvarchar(max).
    DECLARE @sTmp0 nvarchar(4000)
    DECLARE @success int
    SELECT @success = 0

    -- 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.
    DECLARE @key int
    EXEC @hr = sp_OACreate 'Chilkat.SshKey', @key OUT
    IF @hr <> 0
    BEGIN
        PRINT 'Failed to create ActiveX component'
        RETURN
    END

    EXEC sp_OASetProperty @key, 'Password', 'key_password'

    EXEC sp_OAMethod @key, 'LoadText', @sTmp0 OUT, 'qa_data/my_private_key_file'
    EXEC sp_OAMethod @key, 'FromOpenSshPrivateKey', @success OUT, @sTmp0
    IF @success = 0
      BEGIN
        EXEC sp_OAGetProperty @key, 'LastErrorText', @sTmp0 OUT
        PRINT @sTmp0
        EXEC @hr = sp_OADestroy @key
        RETURN
      END

    DECLARE @ssh int
    EXEC @hr = sp_OACreate 'Chilkat.Ssh', @ssh OUT

    EXEC sp_OAMethod @ssh, 'Connect', @success OUT, 'ssh.example.com', 22
    IF @success = 0
      BEGIN
        EXEC sp_OAGetProperty @ssh, 'LastErrorText', @sTmp0 OUT
        PRINT @sTmp0
        EXEC @hr = sp_OADestroy @key
        EXEC @hr = sp_OADestroy @ssh
        RETURN
      END

    -- Authenticate using both a password and private key.
    EXEC sp_OAMethod @ssh, 'AuthenticatePwPk', @success OUT, 'myLogin', 'myPassword', @key
    IF @success = 1
      BEGIN

        PRINT 'Authentication is successful!'
        EXEC @hr = sp_OADestroy @key
        EXEC @hr = sp_OADestroy @ssh
        RETURN
      END

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

    DECLARE @json int
    EXEC @hr = sp_OACreate 'Chilkat.JsonObject', @json OUT

    EXEC sp_OAMethod @ssh, 'GetLastJsonData', NULL, @json

    EXEC sp_OASetProperty @json, 'EmitCompact', 0

    -- 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:

    EXEC sp_OAMethod @json, 'StringOf', @sTmp0 OUT, 'authResult'
    PRINT 'authResult: ' + @sTmp0

    EXEC sp_OAMethod @json, 'StringOf', @sTmp0 OUT, 'authFailReason'
    PRINT 'authFailReason: ' + @sTmp0

    EXEC @hr = sp_OADestroy @key
    EXEC @hr = sp_OADestroy @ssh
    EXEC @hr = sp_OADestroy @json


END
GO