SQL Server
SQL Server
SSH Tunnel Through an Outbound SOCKS Proxy
See more SSH Tunnel Examples
Demonstrates reaching the SSH server through an outbound SOCKS proxy using the SocksVersion, SocksHostname, SocksPort, SocksUsername, and SocksPassword properties.
Background: This is the reverse direction from dynamic forwarding: here a SOCKS proxy is used to reach the SSH server, for networks where outbound connections must pass through one.
SocksVersion is the switch — 0 means no SOCKS, while 4 or 5 selects the protocol. SOCKS5 supports username/password authentication and remote DNS; SOCKS4 supports only a username.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 @sTmp0 nvarchar(4000)
DECLARE @success int
SELECT @success = 0
-- Demonstrates reaching the SSH server through an outbound SOCKS proxy using the SshTunnel
-- properties SocksVersion, SocksHostname, SocksPort, SocksUsername, and SocksPassword.
DECLARE @tunnel int
EXEC @hr = sp_OACreate 'Chilkat.SshTunnel', @tunnel OUT
IF @hr <> 0
BEGIN
PRINT 'Failed to create ActiveX component'
RETURN
END
-- Set SocksVersion to 4 or 5 to route the outbound connection to the SSH server through a SOCKS
-- proxy. A value of 0 (the default) means no SOCKS proxy.
EXEC sp_OASetProperty @tunnel, 'SocksVersion', 5
EXEC sp_OASetProperty @tunnel, 'SocksHostname', 'socks.example.com'
EXEC sp_OASetProperty @tunnel, 'SocksPort', 1080
-- SOCKS4 supports only a username; SOCKS5 supports username and password.
EXEC sp_OASetProperty @tunnel, 'SocksUsername', 'myProxyLogin'
EXEC sp_OASetProperty @tunnel, 'SocksPassword', 'myProxyPassword'
EXEC sp_OASetProperty @tunnel, 'DestHostname', 'db.internal.example.com'
EXEC sp_OASetProperty @tunnel, 'DestPort', 5432
-- Connect to the SSH server through the SOCKS proxy configured above.
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
-- 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'
EXEC sp_OAMethod @tunnel, 'AuthenticatePw', @success OUT, 'mySshLogin', @password
IF @success = 0
BEGIN
EXEC sp_OAGetProperty @tunnel, 'LastErrorText', @sTmp0 OUT
PRINT @sTmp0
EXEC @hr = sp_OADestroy @tunnel
RETURN
END
DECLARE @listenPort int
SELECT @listenPort = 1080
EXEC sp_OAMethod @tunnel, 'BeginAccepting', @success OUT, @listenPort
IF @success = 0
BEGIN
EXEC sp_OAGetProperty @tunnel, 'LastErrorText', @sTmp0 OUT
PRINT @sTmp0
EXEC @hr = sp_OADestroy @tunnel
RETURN
END
PRINT 'Tunnel established through the SOCKS proxy.'
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