Sample code for 30+ languages & platforms
Lua Requires Chilkat v9.5.0.99+

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.

Chilkat Lua Downloads

Lua
local chilkat = require("chilkat")

-- This example requires the Chilkat API to have been previously unlocked.
-- See Global Unlock Sample for sample code.

local ssh_tunnel = chilkat.SshTunnel.new()

local json = chilkat.JsonObject.new()

-- 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.
-- -------------------------------------------------------------------------------------------------------------------------------------------
local allowed_kex = "curve25519-sha256@libssh.org,ecdh-sha2-nistp256"
local allowed_hostKey = "ssh-ed25519,ecdsa-sha2-nistp256"
local allowed_cipher = "chacha20-poly1305@openssh.com,aes256-ctr"
local allowed_mac = "hmac-sha2-256,hmac-sha2-512"

json:update_string("kex", allowed_kex)
json:update_string("hostKey", allowed_hostKey)
json:update_string("cipher", allowed_cipher)
json:update_string("mac", allowed_mac)
ssh_tunnel:set_allowed_algorithms(json)

local port = 22
local success = ssh_tunnel:connect("example.com", port)
if not success then
    print(ssh_tunnel.last_error_text)
    return
end

print("Connected.")

-- ....
-- ....