Lua
Lua
SSH Tunnel for Database Connection (such as ADO, ODBC, JDBC, etc.)
See more SSH Tunnel Examples
Demonstrates how to create an SSH tunneling client in a background thread of your application. This makes it possible to SSH tunnel database connections without the need for separate software (such as PuTTY) to be running.Chilkat Lua Downloads
local chilkat = require("chilkat")
-- This example assumes the Chilkat API to have been previously unlocked.
-- See Global Unlock Sample for sample code.
local success = false
local tunnel = chilkat.SshTunnel.new()
local sshHostname = "sftp.example.com"
local sshPort = 22
-- Connect to an SSH server and establish the SSH tunnel:
success = tunnel:connect(sshHostname, sshPort)
if not success then
print(tunnel.last_error_text)
return
end
-- Authenticate with the SSH server via a login/password
-- or with a public key.
-- This example demonstrates SSH password authentication.
success = tunnel:authenticate_pw("mySshLogin", "mySshPassword")
if not success then
print(tunnel.last_error_text)
return
end
-- The destination host/port is the database server.
-- The DestHostname may be the domain name or
-- IP address (in dotted decimal notation) of the database
-- server.
tunnel.dest_port = 1433
tunnel.dest_hostname = "myDbServer.com"
-- Start accepting connections in a background thread.
-- The SSH tunnels are autonomously run in a background
-- thread. There is one background thread for accepting
-- connections, and another for managing the tunnel pool.
local listenPort = 3316
success = tunnel:begin_accepting(listenPort)
if not success then
print(tunnel.last_error_text)
return
end
-- At this point the app may connect to the database server through
-- the SSH tunnel. The database connection string would
-- use "localhost" for the hostname and 3316 for the port.
-- We're not going to show the database coding here,
-- because it can vary depending on the API you're using
-- (ADO, ODBC, OLE DB, etc. )
-- This is where the application's database code would go...
-- Stop the background listen/accept thread:
local waitForThreadExit = true
success = tunnel:stop_accepting(waitForThreadExit)
if not success then
print(tunnel.last_error_text)
return
end
-- Close the SSH tunnel (would also kick any remaining connected clients).
success = tunnel:close_tunnel(waitForThreadExit)
if not success then
print(tunnel.last_error_text)
return
end