SshTunnel Delphi DLL Reference Documentation
SshTunnel
Current Version: 11.5.0
Chilkat.SshTunnel
Listen on a local port and forward accepted client connections through an
SSH server to a configured destination host and port.
Enable SOCKS-style dynamic port forwarding when each client connection
should choose its own destination through the tunnel.
Authenticate to the SSH server using passwords, public keys,
password-plus-key, secure password lookup, or keyboard-interactive
authentication.
Reach the SSH server through HTTP or SOCKS proxies, or build tunnels
through an existing SSH connection for multi-hop scenarios.
Start accepting client connections in the background, inspect current
state, stop accepting new clients, and disconnect active tunnel clients.
Use accept logs, tunnel logs, current-state XML, and
For an extended overview, see
SshTunnel Class Overview.
Create SSH tunnels for secure local, fixed-destination, dynamic, and multi-hop forwarding.
Chilkat.SshTunnel creates SSH tunnels for forwarding local
client connections through an SSH server to a destination service, such as a
database server or other TCP service. It supports fixed destination
forwarding, dynamic SOCKS-style port forwarding, password and public-key
authentication, keyboard-interactive authentication, proxy connections to the
SSH server, multi-hop SSH connections, background accept threads,
tunnel/client logging, secure secret lookup, and connection diagnostics.
Local port forwarding
Dynamic forwarding
SSH authentication
Proxy and multi-hop access
Accept and manage clients
Logging and diagnostics
LastErrorText to troubleshoot SSH connection, forwarding,
authentication, or client-connection problems.
BeginAccepting to
start the tunnel. Local client applications connect to the tunnel's listen
port, and SshTunnel forwards the traffic through SSH. Use
Chilkat.SshTunnel for port forwarding; use
Chilkat.Ssh for direct SSH sessions, commands, channels, and
shell access.
Create/Dispose
var myObject: HCkSshTunnel; begin myObject := CkSshTunnel_Create(); // ... CkSshTunnel_Dispose(myObject); end;
Creates an instance of the HCkSshTunnel object and returns a handle (i.e. a Pointer). The handle is passed in the 1st argument for the functions listed on this page.
Objects created by calling CkSshTunnel_Create must be freed by calling this method. A memory leak occurs if a handle is not disposed by calling this function.
Properties
AbortCurrent
procedure CkSshTunnel_putAbortCurrent(objHandle: HCkSshTunnel; newPropVal: wordbool); stdcall;
Set this property to from another thread to request that
the currently running foreground operation be aborted. For example, it can
interrupt a synchronous
TrueConnect that is waiting for an SSH
server response.
This property does not stop the background listener or terminate established background tunnel clients.
True; set it back to
False before starting another operation.
AcceptLog
procedure CkSshTunnel_putAcceptLog(objHandle: HCkSshTunnel; newPropVal: PWideChar); stdcall;
function CkSshTunnel__acceptLog(objHandle: HCkSshTunnel): PWideChar; stdcall;
Contains the in-memory activity log for the background listener thread started by
BeginAccepting.
The log is populated only when
KeepAcceptLog is
.
True
See the notes about PWideChar memory ownership and validity.
AcceptLogPath
procedure CkSshTunnel_putAcceptLogPath(objHandle: HCkSshTunnel; newPropVal: PWideChar); stdcall;
function CkSshTunnel__acceptLogPath(objHandle: HCkSshTunnel): PWideChar; stdcall;
Specifies the local file path where activity from the background listener thread is written.
This file-based log is separate from the in-memory
AcceptLog.
See the notes about PWideChar memory ownership and validity.
ClientIdentifier
procedure CkSshTunnel_putClientIdentifier(objHandle: HCkSshTunnel; newPropVal: PWideChar); stdcall;
function CkSshTunnel__clientIdentifier(objHandle: HCkSshTunnel): PWideChar; stdcall;
Specifies the SSH client-identification string sent when connecting to the SSH server.
Starting in Chilkat v9.5.0.99, the default is
SSH-2.0-Chilkat_ followed by the Chilkat version number, such
as SSH-2.0-Chilkat_9.5.0.99.
SSH-2.0-. Some SSH servers
disconnect clients that send an invalid identification string.
See the notes about PWideChar memory ownership and validity.
ClientLogDir
procedure CkSshTunnel_putClientLogDir(objHandle: HCkSshTunnel; newPropVal: PWideChar); stdcall;
function CkSshTunnel__clientLogDir(objHandle: HCkSshTunnel): PWideChar; stdcall;
Specifies the local directory where a separate log file is created for each tunnel client.
When this property is not empty, files are named using the pattern
tunnel_client_log_{random_id}.txt.
See the notes about PWideChar memory ownership and validity.
ConnectTimeoutMs
procedure CkSshTunnel_putConnectTimeoutMs(objHandle: HCkSshTunnel; newPropVal: Integer); stdcall;
Specifies the maximum number of milliseconds allowed for establishing the SSH connection.
- The default value is
30000milliseconds (30 seconds). - A value of
0disables the connection timeout and allows an unlimited wait.
The timeout applies to more than the initial TCP connection. It also covers connection setup performed through an HTTP or SOCKS proxy and waiting for the SSH server identification string after the TCP connection has been established.
DebugLogFilePath
procedure CkSshTunnel_putDebugLogFilePath(objHandle: HCkSshTunnel; newPropVal: PWideChar); stdcall;
function CkSshTunnel__debugLogFilePath(objHandle: HCkSshTunnel): PWideChar; stdcall;
If set to a file path, this property logs the LastErrorText of each Chilkat method or property call to the specified file. This logging helps identify the context and history of Chilkat calls leading up to any crash or hang, aiding in debugging.
Enabling the VerboseLogging property provides more detailed information. This property is mainly used for debugging rare instances where a Chilkat method call causes a hang or crash, which should generally not happen.
Possible causes of hangs include:
- A timeout property set to 0, indicating an infinite timeout.
- A hang occurring within an event callback in the application code.
- An internal bug in the Chilkat code causing the hang.
See the notes about PWideChar memory ownership and validity.
DestHostname
procedure CkSshTunnel_putDestHostname(objHandle: HCkSshTunnel; newPropVal: PWideChar); stdcall;
function CkSshTunnel__destHostname(objHandle: HCkSshTunnel): PWideChar; stdcall;
Specifies the destination hostname or IP address for fixed-destination port forwarding. This is typically the host running the database server or other TCP service that local clients need to reach.
The destination is interpreted from the SSH server's network environment. For
example, localhost and 127.0.0.1 refer to the SSH
server itself, not the computer running the application. Hostname resolution is
therefore performed as part of the forwarding request on the SSH-server side.
Traffic accepted by the local listener is carried through SSH, forwarded by the SSH server to this destination, and returned through the same tunnel.
DynamicPortForwarding
is True. Changing the destination while the listener is
running affects new clients only; existing clients remain connected to the
destination selected when they were accepted.
See the notes about PWideChar memory ownership and validity.
DestPort
procedure CkSshTunnel_putDestPort(objHandle: HCkSshTunnel; newPropVal: Integer); stdcall;
Specifies the TCP port of the destination service used for fixed-destination forwarding, such as the port of a database server.
It is used together with
DestHostname and is ignored
when
DynamicPortForwarding
is .
True
DynamicPortForwarding
procedure CkSshTunnel_putDynamicPortForwarding(objHandle: HCkSshTunnel; newPropVal: wordbool); stdcall;
Controls whether the listener performs fixed-destination or dynamic port forwarding.
-
When
(the default), every accepted connection is forwarded toFalseDestHostnameandDestPort. -
When
, the listener acts as a SOCKS proxy and each inbound client supplies its own destination.True
The SOCKS version is detected independently from each inbound client handshake;
there is no separate inbound SOCKS-version property. SOCKS4 and SOCKS5
CONNECT requests are supported. SOCKS5 BIND and
UDP association are not supported.
Leave
InboundSocksUsername
empty to allow SOCKS5 clients to use the no-authentication method. Set the
inbound username and password to require SOCKS5 username/password
authentication. For SOCKS4, only the user ID can be checked because SOCKS4 has
no password field.
EnableSecrets
procedure CkSshTunnel_putEnableSecrets(objHandle: HCkSshTunnel; newPropVal: wordbool); stdcall;
Enables automatic resolution of credentials from secure storage provided by the operating system.
When set to , supported password properties and methods
may receive a secret specification string beginning with
True!! instead of a literal password. Chilkat resolves the secret
from:
- Windows Credential Manager on Windows.
- Apple Keychain on macOS.
The specification format is:
!![appName|]service[|domain]|username
This applies to
HttpProxyPassword,
SocksPassword,
AuthenticatePw, and
AuthenticatePwPk.
The default value is .
False
HostKeyFingerprint
function CkSshTunnel__hostKeyFingerprint(objHandle: HCkSshTunnel): PWideChar; stdcall;
Contains the SSH server host-key fingerprint after
Connect or
ConnectThroughSsh
establishes the SSH connection. The value is available before user
authentication.
Example:
ssh-ed25519 256 e0:33:b1:81:a5:c6:9a:d2:2e:c9:d3:15:60:ea:cf:4c
Compare this value with a trusted expected fingerprint to verify the identity
of the SSH server. For
ConnectThroughSsh, the
fingerprint is for the final SSH server, not the first-hop server.
CloseTunnel or after the
connection is lost. Use
IsSshConnected to determine
current connection state.
See the notes about PWideChar memory ownership and validity.
HttpProxyAuthMethod
procedure CkSshTunnel_putHttpProxyAuthMethod(objHandle: HCkSshTunnel; newPropVal: PWideChar); stdcall;
function CkSshTunnel__httpProxyAuthMethod(objHandle: HCkSshTunnel): PWideChar; stdcall;
Specifies the authentication method to use when the outbound connection to the SSH server passes through an HTTP proxy that requires authentication.
Valid values are Basic and NTLM.
If SocksVersion is set to 4 or 5, the SOCKS proxy takes precedence and these HTTP proxy settings are ignored. The proxies are not chained.
See the notes about PWideChar memory ownership and validity.
HttpProxyDomain
procedure CkSshTunnel_putHttpProxyDomain(objHandle: HCkSshTunnel; newPropVal: PWideChar); stdcall;
function CkSshTunnel__httpProxyDomain(objHandle: HCkSshTunnel): PWideChar; stdcall;
Specifies the optional Windows domain used for NTLM authentication with the HTTP proxy.
This applies only to the outbound proxy connection used to reach the SSH server,
and only when
HttpProxyAuthMethod
is NTLM.
If SocksVersion is set to 4 or 5, the SOCKS proxy takes precedence and these HTTP proxy settings are ignored. The proxies are not chained.
See the notes about PWideChar memory ownership and validity.
HttpProxyHostname
procedure CkSshTunnel_putHttpProxyHostname(objHandle: HCkSshTunnel; newPropVal: PWideChar); stdcall;
function CkSshTunnel__httpProxyHostname(objHandle: HCkSshTunnel): PWideChar; stdcall;
Specifies the hostname or IPv4 address of the HTTP proxy through which the outbound connection to the SSH server is made.
Leave this property empty when no HTTP proxy is required.
If SocksVersion is set to 4 or 5, the SOCKS proxy takes precedence and these HTTP proxy settings are ignored. The proxies are not chained.
See the notes about PWideChar memory ownership and validity.
HttpProxyPassword
procedure CkSshTunnel_putHttpProxyPassword(objHandle: HCkSshTunnel; newPropVal: PWideChar); stdcall;
function CkSshTunnel__httpProxyPassword(objHandle: HCkSshTunnel): PWideChar; stdcall;
Specifies the password used to authenticate with the HTTP proxy for the outbound connection to the SSH server.
If SocksVersion is set to 4 or 5, the SOCKS proxy takes precedence and these HTTP proxy settings are ignored. The proxies are not chained.
See the notes about PWideChar memory ownership and validity.
HttpProxyPort
procedure CkSshTunnel_putHttpProxyPort(objHandle: HCkSshTunnel; newPropVal: Integer); stdcall;
Specifies the TCP port of the HTTP proxy used for the outbound connection to the SSH server.
Common HTTP proxy ports include 8080 and
3128.
If SocksVersion is set to 4 or 5, the SOCKS proxy takes precedence and these HTTP proxy settings are ignored. The proxies are not chained.
HttpProxyUsername
procedure CkSshTunnel_putHttpProxyUsername(objHandle: HCkSshTunnel; newPropVal: PWideChar); stdcall;
function CkSshTunnel__httpProxyUsername(objHandle: HCkSshTunnel): PWideChar; stdcall;
Specifies the username used to authenticate with the HTTP proxy for the outbound connection to the SSH server.
If SocksVersion is set to 4 or 5, the SOCKS proxy takes precedence and these HTTP proxy settings are ignored. The proxies are not chained.
See the notes about PWideChar memory ownership and validity.
IdleTimeoutMs
procedure CkSshTunnel_putIdleTimeoutMs(objHandle: HCkSshTunnel; newPropVal: Integer); stdcall;
Specifies a stall timeout, in milliseconds, for tunnel data-transfer operations.
The default value is 30000 milliseconds (30 seconds). A value of
0 disables the timeout.
InboundSocksPassword
procedure CkSshTunnel_putInboundSocksPassword(objHandle: HCkSshTunnel; newPropVal: PWideChar); stdcall;
function CkSshTunnel__inboundSocksPassword(objHandle: HCkSshTunnel): PWideChar; stdcall;
Specifies the password required from inbound SOCKS5 clients when
DynamicPortForwarding
is .
True
This property is used together with
InboundSocksUsername.
It does not apply to SOCKS4 because the SOCKS4 protocol has no password field.
See the notes about PWideChar memory ownership and validity.
InboundSocksUsername
procedure CkSshTunnel_putInboundSocksUsername(objHandle: HCkSshTunnel; newPropVal: PWideChar); stdcall;
function CkSshTunnel__inboundSocksUsername(objHandle: HCkSshTunnel): PWideChar; stdcall;
Specifies the username required from inbound SOCKS clients when
DynamicPortForwarding
is .
True
- For SOCKS5, setting this property enables username/password authentication.
- For SOCKS4, the value is compared with the client-supplied user ID.
- Leave it empty to require no inbound SOCKS username.
See the notes about PWideChar memory ownership and validity.
IsAccepting
when the local listener thread is running and accepting
inbound TCP connections; otherwise True.
False
This property describes only the local listener. It can remain
after the SSH connection is lost or after
TrueCloseTunnel is called. In those
states a client may connect to the local port even though its traffic cannot be
forwarded.
Use IsSshConnected separately
when the application also needs to know whether the SSH transport is available.
KeepAcceptLog
procedure CkSshTunnel_putKeepAcceptLog(objHandle: HCkSshTunnel; newPropVal: wordbool); stdcall;
Controls whether activity from the background listener thread is retained in memory.
The default value is . When enabled, retrieve the log
from FalseAcceptLog.
KeepTunnelLog
procedure CkSshTunnel_putKeepTunnelLog(objHandle: HCkSshTunnel; newPropVal: wordbool); stdcall;
Controls whether SSH tunnel-thread activity is retained in memory.
The default value is . When enabled, retrieve the log
from FalseTunnelLog.
LastErrorHtml
function CkSshTunnel__lastErrorHtml(objHandle: HCkSshTunnel): PWideChar; stdcall;
Provides HTML-formatted information about the last called method or property. If a method call fails or behaves unexpectedly, check this property for details. Note that information is available regardless of the method call's success.
See the notes about PWideChar memory ownership and validity.
topLastErrorText
function CkSshTunnel__lastErrorText(objHandle: HCkSshTunnel): PWideChar; stdcall;
Provides plain text information about the last called method or property. If a method call fails or behaves unexpectedly, check this property for details. Note that information is available regardless of the method call's success.
See the notes about PWideChar memory ownership and validity.
LastErrorXml
function CkSshTunnel__lastErrorXml(objHandle: HCkSshTunnel): PWideChar; stdcall;
Provides XML-formatted information about the last called method or property. If a method call fails or behaves unexpectedly, check this property for details. Note that information is available regardless of the method call's success.
See the notes about PWideChar memory ownership and validity.
topLastMethodSuccess
procedure CkSshTunnel_putLastMethodSuccess(objHandle: HCkSshTunnel; newPropVal: wordbool); stdcall;
Indicates the success or failure of the most recent method call: True means success, False means failure. This property remains unchanged by property setters or getters. This method is present to address challenges in checking for null or Nothing returns in certain programming languages. Note: This property does not apply to methods that return integer values or to boolean-returning methods where the boolean does not indicate success or failure.
ListenBindIpAddress
procedure CkSshTunnel_putListenBindIpAddress(objHandle: HCkSshTunnel; newPropVal: PWideChar); stdcall;
function CkSshTunnel__listenBindIpAddress(objHandle: HCkSshTunnel): PWideChar; stdcall;
Specifies the local IPv4 address to which the tunnel's listening socket is bound.
| Value | Listener exposure |
|---|---|
| Empty string | Binds to 0.0.0.0 and accepts connections on all local IPv4 interfaces, subject to firewall rules. |
127.0.0.1 |
Accepts connections only from the local computer through loopback. |
| A specific local LAN address | Accepts connections through that interface only; loopback is not included automatically. |
127.0.0.1. Leaving it empty may expose the listening port to
other computers on the network.
If the value is malformed or is not assigned to a local interface,
BeginAccepting returns
and the bind failure is available in
FalseLastErrorText and the accept log.
See the notes about PWideChar memory ownership and validity.
ListenPort
Contains the local TCP port used by the listener started by
BeginAccepting.
-
If
BeginAcceptingsucceeds with a nonzero requested port, this property contains that port. -
If
BeginAcceptingsucceeds with0, the operating system chooses an available port and this property contains the allocated port when the method returns. -
After a bind failure for an explicitly requested port, this property may still
contain the requested port even though
IsAcceptingis.False - The value is initially
0.
OutboundBindIpAddress
procedure CkSshTunnel_putOutboundBindIpAddress(objHandle: HCkSshTunnel; newPropVal: PWideChar); stdcall;
function CkSshTunnel__outboundBindIpAddress(objHandle: HCkSshTunnel): PWideChar; stdcall;
Specifies the local IP address to which the outbound socket is bound before connecting to the SSH server.
Most applications should leave this property empty. Set it only on a multihomed computer when the SSH connection must originate from a specific local network interface or IP address.
See the notes about PWideChar memory ownership and validity.
OutboundBindPort
procedure CkSshTunnel_putOutboundBindPort(objHandle: HCkSshTunnel; newPropVal: Integer); stdcall;
Specifies the local TCP port to bind before making the outbound connection to the SSH server.
The default value is 0, which allows the operating system to
choose an available ephemeral port. Nearly all applications should leave this
property unchanged.
PreferIpv6
procedure CkSshTunnel_putPreferIpv6(objHandle: HCkSshTunnel; newPropVal: wordbool); stdcall;
Controls which IP version is preferred when a hostname resolves to both IPv4 and IPv6 addresses.
(the default) prefers IPv4.Falseprefers IPv6.True
SocksHostname
procedure CkSshTunnel_putSocksHostname(objHandle: HCkSshTunnel; newPropVal: PWideChar); stdcall;
function CkSshTunnel__socksHostname(objHandle: HCkSshTunnel): PWideChar; stdcall;
Specifies the hostname or IPv4 address of the outbound SOCKS4 or SOCKS5 proxy used to reach the SSH server.
This property is used only when
SocksVersion is
4 or 5.
See the notes about PWideChar memory ownership and validity.
SocksPassword
procedure CkSshTunnel_putSocksPassword(objHandle: HCkSshTunnel; newPropVal: PWideChar); stdcall;
function CkSshTunnel__socksPassword(objHandle: HCkSshTunnel): PWideChar; stdcall;
Specifies the password for authenticating with an outbound SOCKS5 proxy used to reach the SSH server.
SOCKS4 does not support password authentication, so this property does not apply
when SocksVersion is
4.
See the notes about PWideChar memory ownership and validity.
SocksPort
procedure CkSshTunnel_putSocksPort(objHandle: HCkSshTunnel; newPropVal: Integer); stdcall;
Specifies the TCP port of the outbound SOCKS4 or SOCKS5 proxy used to reach the SSH server.
The default value is 1080. This property is used only when
SocksVersion is
4 or 5.
SocksUsername
procedure CkSshTunnel_putSocksUsername(objHandle: HCkSshTunnel; newPropVal: PWideChar); stdcall;
function CkSshTunnel__socksUsername(objHandle: HCkSshTunnel): PWideChar; stdcall;
Specifies the username for the outbound SOCKS4 or SOCKS5 proxy used to reach the SSH server.
This property is used only when
SocksVersion is
4 or 5.
See the notes about PWideChar memory ownership and validity.
SocksVersion
procedure CkSshTunnel_putSocksVersion(objHandle: HCkSshTunnel; newPropVal: Integer); stdcall;
Selects whether the outbound connection to the SSH server is made through a SOCKS proxy.
| Value | Behavior |
|---|---|
0 |
Do not use a SOCKS proxy. This is the default. |
4 |
Connect through a SOCKS4 proxy. |
5 |
Connect through a SOCKS5 proxy. |
When this property is 4 or 5, the SOCKS proxy
settings take precedence over the HTTP proxy settings. The SOCKS and HTTP
proxies are not chained.
SoRcvBuf
procedure CkSshTunnel_putSoRcvBuf(objHandle: HCkSshTunnel; newPropVal: Integer); stdcall;
Sets the receive-buffer size for the underlying TCP socket.
The default value is 4194304 bytes. Normally this property
should remain unchanged. If receive performance is unusually slow, testing a
larger value that is a multiple of 4096 may help.
SoSndBuf
procedure CkSshTunnel_putSoSndBuf(objHandle: HCkSshTunnel; newPropVal: Integer); stdcall;
Sets the send-buffer size for the underlying TCP socket.
The default value is 262144 bytes. Normally this property
should remain unchanged. If send performance is unusually slow, testing values
such as 524288 or 1048576 may help. A
multiple of 4096 is recommended.
TcpNoDelay
procedure CkSshTunnel_putTcpNoDelay(objHandle: HCkSshTunnel; newPropVal: wordbool); stdcall;
Controls the TCP_NODELAY socket option for the underlying TCP
connection.
The default value is . Setting it to
False disables the Nagle algorithm, which can reduce latency
when many small amounts of data are sent.
True
TunnelLog
procedure CkSshTunnel_putTunnelLog(objHandle: HCkSshTunnel; newPropVal: PWideChar); stdcall;
function CkSshTunnel__tunnelLog(objHandle: HCkSshTunnel): PWideChar; stdcall;
Contains the in-memory activity log for the SSH tunnel and client-manager
threads. The log is populated only when
KeepTunnelLog is
.
True
See the notes about PWideChar memory ownership and validity.
TunnelLogPath
procedure CkSshTunnel_putTunnelLogPath(objHandle: HCkSshTunnel; newPropVal: PWideChar); stdcall;
function CkSshTunnel__tunnelLogPath(objHandle: HCkSshTunnel): PWideChar; stdcall;
Specifies the local file path where SSH tunnel-thread activity is written.
This file-based log is separate from the in-memory
TunnelLog.
See the notes about PWideChar memory ownership and validity.
UncommonOptions
procedure CkSshTunnel_putUncommonOptions(objHandle: HCkSshTunnel; newPropVal: PWideChar); stdcall;
function CkSshTunnel__uncommonOptions(objHandle: HCkSshTunnel): PWideChar; stdcall;
Provides optional behavior for uncommon requirements. The default value is an empty string, which is appropriate for most applications.
To enable more than one option, provide a comma-separated list of keywords.
| Keyword | Effect |
|---|---|
ForceUserAuthRsaSha1 |
Forces rsa-sha1 for public-key user authentication. Set this before connecting. Added in v9.5.0.98. |
NoKeepAliveIgnoreMsg |
Disables the default SSH ignore message sent every 20 seconds to keep an idle connection alive. Added in v9.5.0.76. |
no-weak-mac-algs |
Removes hmac-sha1-96, hmac-sha1, hmac-md5, and hmac-ripemd160 from the offered MAC algorithms. Added in v9.5.0.98. |
ProtectFromVpn |
On Android, bypasses an installed or active VPN. Added in v9.5.0.80. |
+ssh-hmac-etm |
Re-enables SSH encrypt-then-MAC algorithms that were disabled by default in v9.5.0.97 as part of the Terrapin mitigation. |
+chacha20-poly1305@openssh.com |
Re-enables chacha20-poly1305@openssh.com, which was removed from the default offer in v9.5.0.97 as part of the Terrapin mitigation. |
See the notes about PWideChar memory ownership and validity.
VerboseLogging
procedure CkSshTunnel_putVerboseLogging(objHandle: HCkSshTunnel; newPropVal: wordbool); stdcall;
If set to True, then the contents of LastErrorText (or LastErrorXml, or LastErrorHtml) may contain more verbose information. The default value is False. Verbose logging should only be used for debugging. The potentially large quantity of logged information may adversely affect peformance.
Version
function CkSshTunnel__version(objHandle: HCkSshTunnel): PWideChar; stdcall;
Version of the component/library, such as "10.1.0"
See the notes about PWideChar memory ownership and validity.
Methods
AuthenticatePk
username: PWideChar;
privateKey: HCkSshKey): wordbool; stdcall;
Authenticates with the SSH server using public-key authentication.
The public key corresponding to privateKey must already be
installed for username on the SSH server.
Call Connect or
ConnectThroughSsh
before calling this method.
LastErrorText.
Returns True for success, False for failure.
AuthenticatePkAsync (1)
username: PWideChar;
privateKey: HCkSshKey): HCkTask; stdcall;
Creates an asynchronous task to call the AuthenticatePk method with the arguments provided.
Note: Async method event callbacks happen in the background thread. Accessing and updating UI elements existing in the main thread may require special considerations.
Returns nil on failure
AuthenticatePw
login: PWideChar;
password: PWideChar): wordbool; stdcall;
Authenticates with the SSH server using login and
password.
Establish the SSH connection first by calling
Connect or
ConnectThroughSsh.
After authentication succeeds, call
BeginAccepting to begin
accepting tunnel clients.
- A rejected username or password does not close the SSH connection; the application may correct the credentials and call this method again.
- Calling this method again after authentication has already succeeded returns
with an “Already authenticated” error.False
LastErrorText captured immediately after the failed call.
Returns True for success, False for failure.
AuthenticatePwAsync (1)
login: PWideChar;
password: PWideChar): HCkTask; stdcall;
Creates an asynchronous task to call the AuthenticatePw method with the arguments provided.
Note: Async method event callbacks happen in the background thread. Accessing and updating UI elements existing in the main thread may require special considerations.
Returns nil on failure
AuthenticatePwPk
username: PWideChar;
password: PWideChar;
privateKey: HCkSshKey): wordbool; stdcall;
Authenticates with an SSH server that requires both a password and a private key.
The public key corresponding to privateKey must already be
installed for username on the SSH server. Most SSH servers
require either password authentication or public-key authentication rather than
both.
LastErrorText.
Returns True for success, False for failure.
AuthenticatePwPkAsync (1)
username: PWideChar;
password: PWideChar;
privateKey: HCkSshKey): HCkTask; stdcall;
Creates an asynchronous task to call the AuthenticatePwPk method with the arguments provided.
Note: Async method event callbacks happen in the background thread. Accessing and updating UI elements existing in the main thread may require special considerations.
Returns nil on failure
AuthenticateSecPw
login: HCkSecureString;
password: HCkSecureString): wordbool; stdcall;
Performs the same password authentication as
AuthenticatePw, but receives
the login and password in SecureString objects.
Returns True for success, False for failure.
AuthenticateSecPwAsync (1)
login: HCkSecureString;
password: HCkSecureString): HCkTask; stdcall;
Creates an asynchronous task to call the AuthenticateSecPw method with the arguments provided.
Note: Async method event callbacks happen in the background thread. Accessing and updating UI elements existing in the main thread may require special considerations.
Returns nil on failure
AuthenticateSecPwPk
username: HCkSecureString;
password: HCkSecureString;
privateKey: HCkSshKey): wordbool; stdcall;
Performs the same combined password-and-private-key authentication as
AuthenticatePwPk, but
receives the username and password in SecureString objects.
Returns True for success, False for failure.
AuthenticateSecPwPkAsync (1)
username: HCkSecureString;
password: HCkSecureString;
privateKey: HCkSshKey): HCkTask; stdcall;
Creates an asynchronous task to call the AuthenticateSecPwPk method with the arguments provided.
Note: Async method event callbacks happen in the background thread. Accessing and updating UI elements existing in the main thread may require special considerations.
Returns nil on failure
BeginAccepting
listenPort: Integer): wordbool; stdcall;
Creates and starts the local listener on listenPort.
The SSH connection must already have been established. Although the listener can be started before user authentication, clients accepted in that state cannot be forwarded. The recommended sequence is to connect, authenticate, and then call this method.
- The requested port must not already be in use on the selected local interface.
- Pass
0to let the operating system choose an available port, then readListenPort. - Calling this method while the listener is already running returns
.False
The method waits for the initial bind-and-listen result. It returns
for errors such as an occupied port, a malformed bind
address, or an address that is not assigned to the local computer. Details are
available immediately in FalseLastErrorText and, when enabled, the
accept log.
Returns True for success, False for failure.
BeginAcceptingAsync (1)
listenPort: Integer): HCkTask; stdcall;
Creates an asynchronous task to call the BeginAccepting method with the arguments provided.
Note: Async method event callbacks happen in the background thread. Accessing and updating UI elements existing in the main thread may require special considerations.
Returns nil on failure
CloseTunnel
waitForThreads: wordbool): wordbool; stdcall;
Disconnects active tunnel clients and stops the tunnel-manager thread.
When waitForThreads is , the method waits
for the client and tunnel-manager threads to exit. It returns
True if a worker thread does not stop; capture
FalseLastErrorText immediately for details.
StopAccepting separately to
stop accepting local TCP connections. After this method returns, the listener
may still accept a local connection even though the connection cannot be
forwarded.
Calling this method more than once is allowed. However, it does not reset the
object for a new call to
Connect. Use a new
SshTunnel object when connecting to a different SSH server.
Returns True for success, False for failure.
Connect
hostname: PWideChar;
port: Integer): wordbool; stdcall;
Establishes the SSH connection that will carry tunneled traffic. This method performs the TCP or proxy connection, the SSH protocol handshake, and host-key negotiation, but it does not authenticate the SSH user.
After connecting, verify
HostKeyFingerprint, then
authenticate by calling one of the Authenticate* methods. Finally,
call BeginAccepting to start
the local listener.
The host-key fingerprint is available immediately after this method succeeds,
before user authentication. Calling Connect again while an SSH
tunnel already exists returns .
False
Chilkat sends an SSH ignore message every 20 seconds to help
keep an unused SSH connection alive. To disable this behavior, add
NoKeepAliveIgnoreMsg to
UncommonOptions before
connecting.
Returns True for success, False for failure.
ConnectAsync (1)
hostname: PWideChar;
port: Integer): HCkTask; stdcall;
Creates an asynchronous task to call the Connect method with the arguments provided.
Note: Async method event callbacks happen in the background thread. Accessing and updating UI elements existing in the main thread may require special considerations.
Returns nil on failure
ConnectThroughSsh
ssh: HCkSsh;
hostname: PWideChar;
port: Integer): wordbool; stdcall;
Connects to a second SSH server through the existing connected and authenticated
Ssh object supplied in ssh.
application -> first SSH server -> second SSH server
hostname and port identify the second SSH server.
After this method succeeds, call an authentication method on this
SshTunnel object to authenticate with the second server.
The supplied Ssh object is borrowed, not copied. It must remain
alive, connected, and authenticated for as long as this tunnel is used. If the
first-hop object is disconnected, existing forwarded clients stop working and
new local connections cannot be forwarded. The local listener may nevertheless
remain active until explicitly stopped.
HostKeyFingerprint reports
the fingerprint of the second SSH server. After the connection is established,
fixed forwarding destinations such as 127.0.0.1 are interpreted
from the second server's network environment.
Returns True for success, False for failure.
ConnectThroughSshAsync (1)
ssh: HCkSsh;
hostname: PWideChar;
port: Integer): HCkTask; stdcall;
Creates an asynchronous task to call the ConnectThroughSsh method with the arguments provided.
Note: Async method event callbacks happen in the background thread. Accessing and updating UI elements existing in the main thread may require special considerations.
Returns nil on failure
ContinueKeyboardAuth
response: PWideChar;
outStr: HCkString): wordbool; stdcall;
function CkSshTunnel__continueKeyboardAuth(objHandle: HCkSshTunnel;
response: PWideChar): PWideChar; stdcall;
Continues a keyboard-interactive authentication exchange started by
StartKeyboardAuth.
If the server requested one response, pass that value directly in
response. If it requested multiple responses, pass XML in the
following form:
<response> <response1>response to first prompt</response1> <response2>response to second prompt</response2> ... <responseN>response to Nth prompt</responseN> </response>
When authentication completes, the returned XML indicates success or failure:
<success>success message</success> <error>error message</error>
If another challenge is required, the method returns another
infoRequest XML document containing the next set of prompts.
Returns True for success, False for failure.
See the notes about PWideChar memory ownership and validity.
ContinueKeyboardAuthAsync (1)
response: PWideChar): HCkTask; stdcall;
Creates an asynchronous task to call the ContinueKeyboardAuth method with the arguments provided.
Note: Async method event callbacks happen in the background thread. Accessing and updating UI elements existing in the main thread may require special considerations.
Returns nil on failure
DisconnectAllClients
waitForThreads: wordbool): wordbool; stdcall;
Disconnects all active tunnel clients while leaving the local listener and SSH connection available.
When waitForThreads is , the method waits
for the current client threads to exit before returning. The listener continues
accepting new clients, and newly accepted clients can be forwarded normally.
True
Returns True for success, False for failure.
GetCurrentState
outStr: HCkString): wordbool; stdcall;
function CkSshTunnel__getCurrentState(objHandle: HCkSshTunnel): PWideChar; stdcall;
Returns an XML snapshot describing the tunnel manager, SSH channels, and current tunnel clients. The returned data is intended for diagnostics and monitoring.
A typical result has the following structure:
<CurrentState>
<tunnelManager rcvByteCount="433" sndByteCount="34"
threadRunning="1" dynamicPortForwarding="0"
staticDestHost="localhost" staticDestPort="18080">
<openChannels count="1">
<channel num="101" channelType="direct-tcpip"
clientWinSize="2096927" serverWinSize="2097127" />
</openChannels>
<closedChannels count="0" />
</tunnelManager>
<clients count="1">
<client destIp="localhost" destPort="18080"
sshChannelNum="101" threadRunning="1"
rcvByteCount="25" sndByteCount="225" />
</clients>
</CurrentState>
The exact child elements can vary with state. For example, channel collections may be empty, and some transport details may be omitted before the tunnel is started or after it stops.
| Section | Information |
|---|---|
tunnelManager |
Aggregate byte counts, worker-thread state, forwarding mode, and configured fixed destination. |
openChannels and closedChannels |
SSH channel numbers, close/EOF flags, packet sizes, and flow-control window sizes. |
clients |
Per-client destination, SSH channel number, worker state, age/activity counters, pending-data flags, and byte counts. |
Returns True for success, False for failure.
See the notes about PWideChar memory ownership and validity.
IsSshConnected
Returns when the SSH transport used by this tunnel is
connected; otherwise returns True.
False
This is independent of the local listener state. The listener may still be
accepting local TCP connections when this method returns ,
but those connections cannot be forwarded until a usable SSH transport exists.
False
For a tunnel created with
ConnectThroughSsh, this
method becomes when the borrowed first-hop
FalseSsh connection is disconnected.
LoadTaskCaller
Loads this object with the SshTunnel instance that initiated
the asynchronous operation represented by task.
Returns True for success, False for failure.
topSetAllowedAlgorithms
json: HCkJsonObject): wordbool; stdcall;
Restricts the SSH connection to the algorithms specified in
json.
This allows an application to define the exact algorithm set that may be used during SSH negotiation.
Returns True for success, False for failure.
StartKeyboardAuth
login: PWideChar;
outStr: HCkString): wordbool; stdcall;
function CkSshTunnel__startKeyboardAuth(objHandle: HCkSshTunnel;
login: PWideChar): PWideChar; stdcall;
Begins keyboard-interactive authentication for login.
When the server requests one or more responses, the returned XML contains the request name, instructions, and prompts:
<infoRequest numPrompts="N"> <name>name text</name> <instruction>instruction text</instruction> <prompt1 echo="1_or_0">prompt text</prompt1> ... <promptN echo="1_or_0">prompt text</promptN> </infoRequest>
The echo attribute indicates whether the response should be
displayed while entered.
If authentication immediately succeeds or fails without requiring a response, the returned XML has one of these forms:
<success>success message</success> <error>error message</error>
Pass the requested response or responses to
ContinueKeyboardAuth.
Returns True for success, False for failure.
See the notes about PWideChar memory ownership and validity.
StartKeyboardAuthAsync (1)
login: PWideChar): HCkTask; stdcall;
Creates an asynchronous task to call the StartKeyboardAuth method with the arguments provided.
Note: Async method event callbacks happen in the background thread. Accessing and updating UI elements existing in the main thread may require special considerations.
Returns nil on failure
StopAccepting
waitForThread: wordbool): wordbool; stdcall;
Stops the local listener so that no new client connections are accepted. Existing forwarded clients remain connected and continue exchanging data.
- When
waitForThreadis, the method waits for the listener thread to exit before returning.True - When it is
, shutdown is asynchronous andFalseIsAcceptingmay remainbriefly after the method returns.True
Call BeginAccepting again to
resume accepting connections. The listener can be restarted on the same port
after the previous listener has stopped.
Returns True for success, False for failure.
Events
AbortCheck
Enables a method call to be aborted by triggering the AbortCheck event at intervals defined by the HeartbeatMs property. If HeartbeatMs is set to its default value of 0, no events will occur. For instance, set HeartbeatMs to 200 to trigger 5 AbortCheck events per second. Return True to abort; return False to continue (not abort)
PercentDone
This provides the percentage completion for any method involving network communications or time-consuming processing, assuming the progress can be measured as a percentage. This event is triggered only when it's possible and logical to express the operation's progress as a percentage. The pctDone argument will range from 1 to 100. For methods that finish quickly, the number of PercentDone callbacks may vary, but the final callback will have pctDone equal to 100. For longer operations, callbacks will not exceed one per percentage point (e.g., 1, 2, 3, ..., 98, 99, 100).
The PercentDone callback also acts as an AbortCheck event. For fast methods where PercentDone fires, an AbortCheck event may not trigger since the PercentDone callback already provides an opportunity to abort. For longer operations, where time between PercentDone callbacks is extended, AbortCheck callbacks enable more responsive operation termination.
Return True to abort; return False to continue (not abort)
ProgressInfo
This event callback provides tag name/value pairs that detail what occurs during a method call. To discover existing tag names, create code to handle the event, emit the pairs, and review them. Most tag names are self-explanatory.
Note: Some Chilkat methods don't fire any ProgressInfo events.
TaskCompleted
Called from the background thread when an asynchronous task completes.