Chilkat HOME .NET Core C# Android™ AutoIt C C# C++ Chilkat2-Python CkPython Classic ASP DataFlex Delphi ActiveX Delphi DLL Go Java Lianja Mono C# Node.js Objective-C PHP ActiveX PHP Extension Perl PowerBuilder PowerShell PureBasic Ruby SQL Server Swift 2 Swift 3,4,5... Tcl Unicode C Unicode C++ VB.NET VBScript Visual Basic 6.0 Visual FoxPro Xojo Plugin
(SQL Server) Multiple Hop SSH to SFTPDemonstrates how to SFTP through an intermediate SSH server (multiple hop). The scheme looks like this: Application => ServerSSH1 => ServerSFtp The ConnectThroughSsh method is added in Chilkat version 9.5.0.55 to accomplish this task.
-- 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) -- This example assumes the Chilkat API to have been previously unlocked. -- See Global Unlock Sample for sample code. DECLARE @ssh1 int -- Use "Chilkat_9_5_0.Ssh" for versions of Chilkat < 10.0.0 EXEC @hr = sp_OACreate 'Chilkat.Ssh', @ssh1 OUT IF @hr <> 0 BEGIN PRINT 'Failed to create ActiveX component' RETURN END -- Hostname may be an IP address or domain name: DECLARE @hostname nvarchar(4000) SELECT @hostname = '192.168.1.111' DECLARE @port nvarchar(4000) SELECT @port = 22 -- Connect directly to the 1st SSH server: DECLARE @success int EXEC sp_OAMethod @ssh1, 'Connect', @success OUT, @hostname, @port IF @success <> 1 BEGIN EXEC sp_OAGetProperty @ssh1, 'LastErrorText', @sTmp0 OUT PRINT @sTmp0 EXEC @hr = sp_OADestroy @ssh1 RETURN END -- Authenticate using login/password: EXEC sp_OAMethod @ssh1, 'AuthenticatePw', @success OUT, 'myLogin', 'myPassword' IF @success <> 1 BEGIN EXEC sp_OAGetProperty @ssh1, 'LastErrorText', @sTmp0 OUT PRINT @sTmp0 EXEC @hr = sp_OADestroy @ssh1 RETURN END -- Connect through the 1st SSH connection to reach a 2nd SSH server (for SFTP) -- Note: Any number of connections may be simultaneously tunneled through a single -- existing SSH connection. DECLARE @sftp int -- Use "Chilkat_9_5_0.SFtp" for versions of Chilkat < 10.0.0 EXEC @hr = sp_OACreate 'Chilkat.SFtp', @sftp OUT -- Connect to some SSH/SFTP server through ssh1. EXEC sp_OAMethod @sftp, 'ConnectThroughSsh', @success OUT, @ssh1, 'sftp.someremoteserver.com', 22 IF @success <> 1 BEGIN EXEC sp_OAGetProperty @sftp, 'LastErrorText', @sTmp0 OUT PRINT @sTmp0 EXEC @hr = sp_OADestroy @ssh1 EXEC @hr = sp_OADestroy @sftp RETURN END -- Authenticate with the SFTP server. EXEC sp_OAMethod @sftp, 'AuthenticatePw', @success OUT, 'myLogin', 'myPassword' IF @success <> 1 BEGIN EXEC sp_OAGetProperty @sftp, 'LastErrorText', @sTmp0 OUT PRINT @sTmp0 EXEC @hr = sp_OADestroy @ssh1 EXEC @hr = sp_OADestroy @sftp RETURN END -- After authenticating, the SFTP subsystem must be initialized: EXEC sp_OAMethod @sftp, 'InitializeSftp', @success OUT IF @success <> 1 BEGIN EXEC sp_OAGetProperty @sftp, 'LastErrorText', @sTmp0 OUT PRINT @sTmp0 EXEC @hr = sp_OADestroy @ssh1 EXEC @hr = sp_OADestroy @sftp RETURN END -- Upload from the local file to the SSH server. -- Important -- the remote filepath is the 1st argument, -- the local filepath is the 2nd argument; DECLARE @remoteFilePath nvarchar(4000) SELECT @remoteFilePath = 'hamlet.xml' DECLARE @localFilePath nvarchar(4000) SELECT @localFilePath = 'c:/temp/hamlet.xml' EXEC sp_OAMethod @sftp, 'UploadFileByName', @success OUT, @remoteFilePath, @localFilePath IF @success <> 1 BEGIN EXEC sp_OAGetProperty @sftp, 'LastErrorText', @sTmp0 OUT PRINT @sTmp0 EXEC @hr = sp_OADestroy @ssh1 EXEC @hr = sp_OADestroy @sftp RETURN END PRINT 'Success.' -- Close the connection with the SFTP server.(This closes the the tunnel through ssh1.) -- The connection with ssh1 is still alive, and may be used for more connections. EXEC sp_OAMethod @sftp, 'Disconnect', NULL -- ... -- ... -- ... EXEC sp_OAMethod @ssh1, 'Disconnect', NULL EXEC @hr = sp_OADestroy @ssh1 EXEC @hr = sp_OADestroy @sftp END GO |
© 2000-2024 Chilkat Software, Inc. All Rights Reserved.