DataFlex
DataFlex
Start an SSH Tunnel Listener (BeginAccepting)
See more SSH Tunnel Examples
Demonstrates the Chilkat SshTunnel.BeginAccepting method, which creates and starts the local listener on the given port. The only argument is the listen port. Connect and authenticate first — clients accepted before authentication cannot be forwarded. The IsAccepting property reports whether the listener is running.
Background: This is the step that actually turns the object into a working tunnel: it spawns a background thread that accepts local TCP connections and forwards each through the authenticated SSH transport. Because the forwarding runs on its own thread, control returns to your program immediately and the tunnel operates while the rest of the application does other work — which is why a separate
CloseTunnel is needed to shut it down cleanly.Chilkat DataFlex Downloads
Use ChilkatAx-win32.pkg
Procedure Test
Boolean iSuccess
Handle hoTunnel
Integer iSshPort
String sPassword
Integer iListenPort
Boolean iWaitForThreadExit
String sTemp1
Boolean bTemp1
Move False To iSuccess
// Demonstrates the SshTunnel.BeginAccepting method, which creates and starts the local listener
// on the given port. The only argument is the listen port. Connect and authenticate first;
// clients accepted before authentication cannot be forwarded.
Get Create (RefClass(cComChilkatSshTunnel)) To hoTunnel
If (Not(IsComObjectCreated(hoTunnel))) Begin
Send CreateComObject of hoTunnel
End
Set ComDestHostname Of hoTunnel To "db.internal.example.com"
Set ComDestPort Of hoTunnel To 5432
Move 22 To iSshPort
Get ComConnect Of hoTunnel "ssh.example.com" iSshPort To iSuccess
If (iSuccess = False) Begin
Get ComLastErrorText Of hoTunnel To sTemp1
Showln sTemp1
Procedure_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.
Move "mySshPassword" To sPassword
Get ComAuthenticatePw Of hoTunnel "mySshLogin" sPassword To iSuccess
If (iSuccess = False) Begin
Get ComLastErrorText Of hoTunnel To sTemp1
Showln sTemp1
Procedure_Return
End
// Start the local listener. Local TCP connections to this port are forwarded to DestHostname:DestPort
// through the SSH server.
Move 1080 To iListenPort
Get ComBeginAccepting Of hoTunnel iListenPort To iSuccess
If (iSuccess = False) Begin
Get ComLastErrorText Of hoTunnel To sTemp1
Showln sTemp1
Procedure_Return
End
// IsAccepting reports whether the listener thread is running.
Get ComIsAccepting Of hoTunnel To bTemp1
If (bTemp1) Begin
Showln "The tunnel is accepting connections on port " iListenPort
End
// ... the tunnel forwards traffic on a background thread while your application runs ...
Move True To iWaitForThreadExit
Get ComCloseTunnel Of hoTunnel iWaitForThreadExit To iSuccess
If (iSuccess = False) Begin
Get ComLastErrorText Of hoTunnel To sTemp1
Showln sTemp1
Procedure_Return
End
End_Procedure