Lua
Lua
SSH Tunnel Per-Client Logging and Client Identifier
See more SSH Tunnel Examples
Demonstrates the ClientLogDir and ClientIdentifier properties. When ClientLogDir is set, a separate log file is created for each tunnel client; ClientIdentifier is the SSH client-identification string sent during the handshake.
Note: The log paths are relative to the application's current working directory. Absolute paths may also be used.
Background: When many clients share one tunnel, a single combined log is hard to follow, so
ClientLogDir gives each connection its own file — the fastest way to diagnose one misbehaving client. ClientIdentifier sets the version string the server sees; overriding the default is occasionally needed for compatibility with servers that key behavior off the client identification, or simply to label your application in server logs.Chilkat Lua Downloads
local chilkat = require("chilkat")
-- Demonstrates the SshTunnel per-client logging properties ClientLogDir and ClientIdentifier.
local tunnel = chilkat.SshTunnel.new()
-- When ClientLogDir is set, a separate log file is created for each tunnel client in this
-- directory, which is useful for troubleshooting individual connections.
tunnel.client_log_dir = "qa_output/client_logs"
-- The SSH client-identification string sent to the SSH server during the handshake.
tunnel.client_identifier = "SSH-2.0-MyTunnelApp_1.0"
tunnel.dest_hostname = "db.internal.example.com"
tunnel.dest_port = 5432
local sshPort = 22
local success = tunnel:connect("ssh.example.com", sshPort)
if not success then
print(tunnel.last_error_text)
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.
local password = "mySshPassword"
success = tunnel:authenticate_pw("mySshLogin", password)
if not success then
print(tunnel.last_error_text)
return
end
local listenPort = 1080
success = tunnel:begin_accepting(listenPort)
if not success then
print(tunnel.last_error_text)
return
end
print("Tunnel running; each client is logged in " .. tunnel.client_log_dir)
local waitForThreadExit = true
success = tunnel:close_tunnel(waitForThreadExit)
if not success then
print(tunnel.last_error_text)
return
end