SQL Server
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
-- 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