DataFlex
DataFlex
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 DataFlex Downloads
Use ChilkatAx-win32.pkg
Procedure Test
Boolean iSuccess
Handle hoSsh
Integer iPort
Integer iChannel1
Integer iChannel2
Integer iChannel3
Integer iPollTimeoutMs
Integer iNumFinished
Integer iChannel
String sTemp1
Move False To iSuccess
// This example requires the Chilkat API to have been previously unlocked.
// See Global Unlock Sample for sample code.
Get Create (RefClass(cComChilkatSsh)) To hoSsh
If (Not(IsComObjectCreated(hoSsh))) Begin
Send CreateComObject of hoSsh
End
Move 22 To iPort
Get ComConnect Of hoSsh "the-ssh-server.com" iPort To iSuccess
If (iSuccess <> True) Begin
Get ComLastErrorText Of hoSsh To sTemp1
Showln sTemp1
Procedure_Return
End
// Authenticate using login/password:
Get ComAuthenticatePw Of hoSsh "theSshLogin" "theSshPassword" To iSuccess
If (iSuccess <> True) Begin
Get ComLastErrorText Of hoSsh To sTemp1
Showln sTemp1
Procedure_Return
End
// Start several commands on the server.
Get ComQuickCmdSend Of hoSsh "df" To iChannel1
If (iChannel1 < 0) Begin
Get ComLastErrorText Of hoSsh To sTemp1
Showln sTemp1
Procedure_Return
End
Get ComQuickCmdSend Of hoSsh "date" To iChannel2
If (iChannel2 < 0) Begin
Get ComLastErrorText Of hoSsh To sTemp1
Showln sTemp1
Procedure_Return
End
Get ComQuickCmdSend Of hoSsh "echo hello world" To iChannel3
If (iChannel3 < 0) Begin
Get ComLastErrorText Of hoSsh To sTemp1
Showln sTemp1
Procedure_Return
End
// Now collect the results of each command.
Move 50 To iPollTimeoutMs
Move 0 To iNumFinished
While (iNumFinished < 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.
Get ComQuickCmdCheck Of hoSsh iPollTimeoutMs To iChannel
If (iChannel = -2) Begin
Get ComLastErrorText Of hoSsh To sTemp1
Showln sTemp1
Procedure_Return
End
If (iChannel >= 0) Begin
Showln "---- channel " iChannel " finished ----"
Get ComGetReceivedText Of hoSsh iChannel "ansi" To sTemp1
Showln sTemp1
Move (iNumFinished + 1) To iNumFinished
End
Loop
// --------------
// 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
End_Procedure