Sample code for 30+ languages & platforms
Visual Basic 6.0

Multiple SendReqExec on the Same Connection

See more SSH Examples

Demonstrates running a series of commands on one SSH connection using SendReqExec. Each exec request requires its own logical channel — this is not a separate SSH connection, just a new session channel on the existing one.

Background: An SSH session channel is single-use for an exec request: once the command runs and the server closes the channel, that channel cannot be reused. Opening a fresh channel per command is cheap, since the expensive work — the TCP connection, key exchange, and authentication — is done once and shared. This is why running ten commands over one connection is far faster than connecting ten times.

Chilkat Visual Basic 6.0 Downloads

Visual Basic 6.0
Dim success As Long
success = 0

'  This example requires the Chilkat API to have been previously unlocked.
'  See Global Unlock Sample for sample code.

'  Demonstrates running a series of commands on one SSH connection using SendReqExec.  Each exec
'  request requires its own logical channel.  This is not a new SSH connection -- it is simply a
'  new session channel on the existing one.

Dim ssh As New ChilkatSsh

Dim hostname As String
hostname = "ssh.example.com"
Dim port As Long
port = 22
success = ssh.Connect(hostname,port)
If (success = 0) Then
    Debug.Print ssh.LastErrorText
    Exit Sub
End If

'  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.
Dim password As String
password = "mySshPassword"

success = ssh.AuthenticatePw("mySshLogin",password)
If (success = 0) Then
    Debug.Print ssh.LastErrorText
    Exit Sub
End If

'  IMPORTANT: Set a read timeout.  ReadTimeoutMs defaults to 0, which means no limit -- without
'  it, this call waits forever if the server never sends channel close.
ssh.ReadTimeoutMs = 15000

'  ---- 1st command, on its own session channel ----
Dim channelNum As Long
channelNum = ssh.OpenSessionChannel()
If (channelNum < 0) Then
    Debug.Print ssh.LastErrorText
    Exit Sub
End If

success = ssh.SendReqExec(channelNum,"ls -al")
If (success = 0) Then
    Debug.Print ssh.LastErrorText
    Exit Sub
End If

success = ssh.ChannelReceiveToClose(channelNum)
If (success = 0) Then
    Debug.Print ssh.LastErrorText
    Exit Sub
End If

Dim cmdOutput As String
cmdOutput = ssh.GetReceivedText(channelNum,"utf-8")
If (ssh.LastMethodSuccess = 0) Then
    Debug.Print ssh.LastErrorText
    Exit Sub
End If

Debug.Print cmdOutput
Debug.Print "----"

'  ---- 2nd command, on a NEW session channel over the same connection ----
channelNum = ssh.OpenSessionChannel()
If (channelNum < 0) Then
    Debug.Print ssh.LastErrorText
    Exit Sub
End If

success = ssh.SendReqExec(channelNum,"nslookup chilkatsoft.com")
If (success = 0) Then
    Debug.Print ssh.LastErrorText
    Exit Sub
End If

success = ssh.ChannelReceiveToClose(channelNum)
If (success = 0) Then
    Debug.Print ssh.LastErrorText
    Exit Sub
End If

cmdOutput = ssh.GetReceivedText(channelNum,"utf-8")
If (ssh.LastMethodSuccess = 0) Then
    Debug.Print ssh.LastErrorText
    Exit Sub
End If

Debug.Print cmdOutput

ssh.Disconnect