Xbase++
Xbase++
SSH Through a SOCKS Proxy
See more SSH Examples
Demonstrates connecting to an SSH server through a SOCKS4 or SOCKS5 proxy. Set the SOCKS properties before calling Connect, and set SocksVersion to match the proxy server.
Background: SOCKS is a general-purpose TCP relay, so unlike an HTTP proxy it is designed from the start to carry arbitrary protocols — usually the smoother option for SSH. The version matters: SOCKS4 supports only a username with no password, while SOCKS5 supports full login/password authentication as well as IPv6 and remote DNS resolution. Note this is the inverse of dynamic port forwarding: here a SOCKS proxy is used to reach the SSH server, rather than SSH providing a SOCKS proxy.
Chilkat Xbase++ Downloads
LOCAL nSuccess
LOCAL oSsh
LOCAL cHostname
LOCAL nPort
LOCAL cPassword
nSuccess := 0
// This example requires the Chilkat API to have been previously unlocked.
// See Global Unlock Sample for sample code.
// Demonstrates connecting to an SSH server through a SOCKS4 or SOCKS5 proxy.
oSsh := CreateObject("Chilkat.Ssh")
// Set the SOCKS proxy properties before connecting. The hostname may be a domain name or an
// IP address.
oSsh:SocksHostname := "socks.example.com"
oSsh:SocksPort := 1080
oSsh:SocksUsername := "mySocksLogin"
oSsh:SocksPassword := "mySocksPassword"
// Set the version to match the proxy server: 4 or 5.
// Note: SOCKS4 supports only a username, with no password. SOCKS5 supports full
// login/password authentication.
oSsh:SocksVersion := 5
cHostname := "ssh.example.com"
nPort := 22
nSuccess := oSsh:Connect(cHostname, nPort)
IF (nSuccess == 0)
? oSsh:LastErrorText
oSsh:destroy()
RETURN
ENDIF
? "Connected to the SSH server through the SOCKS proxy."
// 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.
cPassword := "mySshPassword"
nSuccess := oSsh:AuthenticatePw("mySshLogin", cPassword)
IF (nSuccess == 0)
? oSsh:LastErrorText
oSsh:destroy()
RETURN
ENDIF
// ... use the SSH connection normally ...
oSsh:Disconnect()
oSsh:destroy()