PureBasic
PureBasic
SSH Parallel Remote Commands on Single Server
See more SSH Examples
Shows how to execute multiple commands in parallel on a single SSH server and retrieve the command output for each.Chilkat PureBasic Downloads
IncludeFile "CkSsh.pb"
Procedure ChilkatExample()
success.i = 0
; This example requires the Chilkat API to have been previously unlocked.
; See Global Unlock Sample for sample code.
ssh.i = CkSsh::ckCreate()
If ssh.i = 0
Debug "Failed to create object."
ProcedureReturn
EndIf
port.i = 22
success = CkSsh::ckConnect(ssh,"the-ssh-server.com",port)
If success <> 1
Debug CkSsh::ckLastErrorText(ssh)
CkSsh::ckDispose(ssh)
ProcedureReturn
EndIf
; Authenticate using login/password:
success = CkSsh::ckAuthenticatePw(ssh,"theSshLogin","theSshPassword")
If success <> 1
Debug CkSsh::ckLastErrorText(ssh)
CkSsh::ckDispose(ssh)
ProcedureReturn
EndIf
; Start several commands on the server.
channel1.i = CkSsh::ckQuickCmdSend(ssh,"df")
If channel1 < 0
Debug CkSsh::ckLastErrorText(ssh)
CkSsh::ckDispose(ssh)
ProcedureReturn
EndIf
channel2.i = CkSsh::ckQuickCmdSend(ssh,"date")
If channel2 < 0
Debug CkSsh::ckLastErrorText(ssh)
CkSsh::ckDispose(ssh)
ProcedureReturn
EndIf
channel3.i = CkSsh::ckQuickCmdSend(ssh,"echo hello world")
If channel3 < 0
Debug CkSsh::ckLastErrorText(ssh)
CkSsh::ckDispose(ssh)
ProcedureReturn
EndIf
; Now collect the results of each command.
pollTimeoutMs.i = 50
numFinished.i = 0
While numFinished < 3
; Check to see if anything has finished.
; QuickCmdCheck returns -1 if there are no errors and nothing else finished
; QuickCmdCheck returns -2 if there was an error (such as a lost connection)
; QuickCmdCheck returns a channel number if a channel finished.
channel.i = CkSsh::ckQuickCmdCheck(ssh,pollTimeoutMs)
If channel = -2
Debug CkSsh::ckLastErrorText(ssh)
CkSsh::ckDispose(ssh)
ProcedureReturn
EndIf
If channel >= 0
Debug "---- channel " + Str(channel) + " finished ----"
Debug CkSsh::ckGetReceivedText(ssh,channel,"ansi")
numFinished = numFinished + 1
EndIf
Wend
; --------------
; Sample output:
; ---- channel 105 finished ----
; hello world
;
; ---- channel 104 finished ----
; Thu Dec 22 17:43:58 CST 2016
;
; ---- channel 103 finished ----
; Filesystem 512-blocks Used Available Capacity iused ifree %iused Mounted on
; /dev/disk2 2176716032 265739728 1910464304 13% 33281464 238808038 12% /
; devfs 382 382 0 100% 662 0 100% /dev
; map -hosts 0 0 0 100% 0 0 100% /net
; map auto_home 0 0 0 100% 0 0 100% /home
; /dev/disk3s2 374668 374668 0 100% 93665 0 100% /Volumes/Google Chrome
CkSsh::ckDispose(ssh)
ProcedureReturn
EndProcedure