SQL Server
SQL Server
SSH Tunnel Set Allowed Algorithms
See more SSH Tunnel Examples
Demonstrates how to explicitly set the algorithms allowed in the SSH connection protocol for SSH tunneling.Note: This example requires Chilkat v9.5.0.99 or greater.
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 requires the Chilkat API to have been previously unlocked.
-- See Global Unlock Sample for sample code.
DECLARE @ssh_tunnel int
EXEC @hr = sp_OACreate 'Chilkat.SshTunnel', @ssh_tunnel OUT
IF @hr <> 0
BEGIN
PRINT 'Failed to create ActiveX component'
RETURN
END
DECLARE @json int
EXEC @hr = sp_OACreate 'Chilkat.JsonObject', @json OUT
-- Here are the algorithms supported by Chilkat at the time this example was written (14-June-2024)
-- ---------------------------
-- SSH Key-Exchange Algorithms
-- ---------------------------
-- curve25519-sha256
-- curve25519-sha256@libssh.org
-- ecdh-sha2-nistp256
-- ecdh-sha2-nistp384
-- ecdh-sha2-nistp521
-- diffie-hellman-group14-sha256
-- diffie-hellman-group16-sha512
-- diffie-hellman-group18-sha512
-- diffie-hellman-group-exchange-sha256
-- diffie-hellman-group1-sha1
-- diffie-hellman-group14-sha1
-- diffie-hellman-group-exchange-sha1
-- ---------------------------
-- SSH Host Key Algorithms
-- ---------------------------
-- ssh-ed25519
-- ecdsa-sha2-nistp256
-- ecdsa-sha2-nistp384
-- ecdsa-sha2-nistp521
-- rsa-sha2-256
-- rsa-sha2-512
-- ssh-rsa
-- ssh-dss
-- ---------------------------
-- SSH Cipher Algorithms
-- ---------------------------
-- chacha20-poly1305@openssh.com
-- aes128-ctr
-- aes256-ctr
-- aes192-ctr
-- aes128-cbc
-- aes256-cbc
-- aes192-cbc
-- aes128-gcm@openssh.com
-- aes256-gcm@openssh.com
-- twofish256-cbc
-- twofish128-cbc
-- blowfish-cbc
-- ---------------------------
-- SSH MAC Algorithms
-- ---------------------------
-- hmac-sha2-256
-- hmac-sha2-512
-- hmac-sha2-256-etm@openssh.com
-- hmac-sha2-512-etm@openssh.com
-- hmac-sha1-etm@openssh.com
-- hmac-sha1
-- hmac-ripemd160
-- hmac-sha1-96
-- hmac-md5
-- Specify the allowed key-exchange, host-key, cipher (i.e. encryption), and mac (i.e. hash) algorithms allowed, in the order of preference.
-- -------------------------------------------------------------------------------------------------------------------------------------------
-- Note: You typically should NOT explicitly set allowed algorithms.
-- By default, Chilkat orders algorithms according to best practices, and pays attention to vulnerabilities such as the "Terrapin Attack".
-- Hard-coding algorthims can make your application brittle and prone to breaking over a long period of time,
-- if a server (at some point in the future) changes its allowed algorithms, or if you connect to a different server,
-- such that the client (Chilkat) and server cannot find a set of mutually agreed-upon algorithms.
-- -------------------------------------------------------------------------------------------------------------------------------------------
DECLARE @allowed_kex nvarchar(4000)
SELECT @allowed_kex = 'curve25519-sha256@libssh.org,ecdh-sha2-nistp256'
DECLARE @allowed_hostKey nvarchar(4000)
SELECT @allowed_hostKey = 'ssh-ed25519,ecdsa-sha2-nistp256'
DECLARE @allowed_cipher nvarchar(4000)
SELECT @allowed_cipher = 'chacha20-poly1305@openssh.com,aes256-ctr'
DECLARE @allowed_mac nvarchar(4000)
SELECT @allowed_mac = 'hmac-sha2-256,hmac-sha2-512'
EXEC sp_OAMethod @json, 'UpdateString', @success OUT, 'kex', @allowed_kex
EXEC sp_OAMethod @json, 'UpdateString', @success OUT, 'hostKey', @allowed_hostKey
EXEC sp_OAMethod @json, 'UpdateString', @success OUT, 'cipher', @allowed_cipher
EXEC sp_OAMethod @json, 'UpdateString', @success OUT, 'mac', @allowed_mac
EXEC sp_OAMethod @ssh_tunnel, 'SetAllowedAlgorithms', @success OUT, @json
DECLARE @port int
SELECT @port = 22
EXEC sp_OAMethod @ssh_tunnel, 'Connect', @success OUT, 'example.com', @port
IF @success <> 1
BEGIN
EXEC sp_OAGetProperty @ssh_tunnel, 'LastErrorText', @sTmp0 OUT
PRINT @sTmp0
EXEC @hr = sp_OADestroy @ssh_tunnel
EXEC @hr = sp_OADestroy @json
RETURN
END
PRINT 'Connected.'
-- ....
-- ....
EXEC @hr = sp_OADestroy @ssh_tunnel
EXEC @hr = sp_OADestroy @json
END
GO