SQL Server
SQL Server
Continue SSH Tunnel Keyboard-Interactive Authentication
See more SSH Tunnel Examples
Demonstrates the Chilkat SshTunnel.ContinueKeyboardAuth method, which submits a response to a keyboard-interactive prompt. The only argument is the response text; for a request with multiple prompts, an XML response is supplied instead. It returns XML indicating the next prompt or the final result.
Background: This is the second half of the exchange started by
StartKeyboardAuth. A server may issue several rounds of prompts, so a robust client loops: submit answers, read the returned XML, and continue until it sees success or failure. On success, BeginAccepting still must be called before the tunnel forwards traffic.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
DECLARE @iTmp0 int
DECLARE @sTmp0 nvarchar(4000)
DECLARE @success int
SELECT @success = 0
-- Demonstrates the SshTunnel.ContinueKeyboardAuth method, which submits a response to a
-- keyboard-interactive prompt. The only argument is the response. For multiple prompts, an XML
-- response is supplied instead.
DECLARE @tunnel int
EXEC @hr = sp_OACreate 'Chilkat.SshTunnel', @tunnel OUT
IF @hr <> 0
BEGIN
PRINT 'Failed to create ActiveX component'
RETURN
END
-- The tunnel forwards accepted local connections to this destination through the SSH server.
EXEC sp_OASetProperty @tunnel, 'DestHostname', 'db.internal.example.com'
EXEC sp_OASetProperty @tunnel, 'DestPort', 5432
-- Connect to the SSH server. This performs the TCP/proxy connection and SSH handshake, but
-- does not authenticate yet.
DECLARE @sshPort int
SELECT @sshPort = 22
EXEC sp_OAMethod @tunnel, 'Connect', @success OUT, 'ssh.example.com', @sshPort
IF @success = 0
BEGIN
EXEC sp_OAGetProperty @tunnel, 'LastErrorText', @sTmp0 OUT
PRINT @sTmp0
EXEC @hr = sp_OADestroy @tunnel
RETURN
END
-- Begin keyboard-interactive authentication to receive the server's prompt(s).
DECLARE @infoRequestXml nvarchar(4000)
EXEC sp_OAMethod @tunnel, 'StartKeyboardAuth', @infoRequestXml OUT, 'mySshLogin'
EXEC sp_OAGetProperty @tunnel, 'LastMethodSuccess', @iTmp0 OUT
IF @iTmp0 = 0
BEGIN
EXEC sp_OAGetProperty @tunnel, 'LastErrorText', @sTmp0 OUT
PRINT @sTmp0
EXEC @hr = sp_OADestroy @tunnel
RETURN
END
-- 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.
DECLARE @password nvarchar(4000)
SELECT @password = 'mySshPassword'
-- Submit the response (typically the password). The returned XML indicates the next prompt or
-- the final result.
DECLARE @result nvarchar(4000)
EXEC sp_OAMethod @tunnel, 'ContinueKeyboardAuth', @result OUT, @password
EXEC sp_OAGetProperty @tunnel, 'LastMethodSuccess', @iTmp0 OUT
IF @iTmp0 = 0
BEGIN
EXEC sp_OAGetProperty @tunnel, 'LastErrorText', @sTmp0 OUT
PRINT @sTmp0
EXEC @hr = sp_OADestroy @tunnel
RETURN
END
PRINT @result
DECLARE @waitForThreadExit int
SELECT @waitForThreadExit = 1
EXEC sp_OAMethod @tunnel, 'CloseTunnel', @success OUT, @waitForThreadExit
IF @success = 0
BEGIN
EXEC sp_OAGetProperty @tunnel, 'LastErrorText', @sTmp0 OUT
PRINT @sTmp0
EXEC @hr = sp_OADestroy @tunnel
RETURN
END
EXEC @hr = sp_OADestroy @tunnel
END
GO