Chilkat HOME .NET Core C# Android™ AutoIt C C# C++ Chilkat2-Python CkPython Classic ASP DataFlex Delphi ActiveX Delphi DLL Go Java Lianja Mono C# Node.js Objective-C PHP ActiveX PHP Extension Perl PowerBuilder PowerShell PureBasic Ruby SQL Server Swift 2 Swift 3,4,5... Tcl Unicode C Unicode C++ VB.NET VBScript Visual Basic 6.0 Visual FoxPro Xojo Plugin
(DataFlex) SSH Parallel Remote Commands on Multiple ServersSee more SSH ExamplesShows how to execute a command in parallel on multiple servers.
Use ChilkatAx-win32.pkg Procedure Test Handle hoSsh1 Handle hoSsh2 Handle hoSsh3 Integer iPort Boolean iSuccess String sCmd Integer iSsh1Channel Integer iSsh2Channel Integer iSsh3Channel Integer iPollTimeoutMs Integer iNumFinished Integer iChannel Boolean iSsh1Finished Boolean iSsh2Finished Boolean iSsh3Finished String sTemp1 // This example requires the Chilkat API to have been previously unlocked. // See Global Unlock Sample for sample code. // Executing a command on multiple servers simultaneously is straightforward. // It's just a matter of using one SSH object per server.. Get Create (RefClass(cComChilkatSsh)) To hoSsh1 If (Not(IsComObjectCreated(hoSsh1))) Begin Send CreateComObject of hoSsh1 End Get Create (RefClass(cComChilkatSsh)) To hoSsh2 If (Not(IsComObjectCreated(hoSsh2))) Begin Send CreateComObject of hoSsh2 End Get Create (RefClass(cComChilkatSsh)) To hoSsh3 If (Not(IsComObjectCreated(hoSsh3))) Begin Send CreateComObject of hoSsh3 End Move 22 To iPort Get ComConnect Of hoSsh1 "ssh-server1.com" iPort To iSuccess If (iSuccess <> True) Begin Get ComLastErrorText Of hoSsh1 To sTemp1 Showln sTemp1 Procedure_Return End // Authenticate using login/password: Get ComAuthenticatePw Of hoSsh1 "sshLogin1" "sshPassword1" To iSuccess If (iSuccess <> True) Begin Get ComLastErrorText Of hoSsh1 To sTemp1 Showln sTemp1 Procedure_Return End // Connect and authenticate with 2 more servers. // For brevity, the success/failure won't be checked... Get ComConnect Of hoSsh2 "ssh-server2.com" iPort To iSuccess Get ComAuthenticatePw Of hoSsh2 "sshLogin2" "sshPassword2" To iSuccess Get ComConnect Of hoSsh3 "ssh-server3.com" iPort To iSuccess Get ComAuthenticatePw Of hoSsh3 "sshLogin3" "sshPassword3" To iSuccess // Note: If we wanted, we could've used ConnectAsync and AuthenticatePwAsync // to do the connecting and authenticating in parallel... // The command to be run on each SSH server will sleep for 5 seconds, // and then show the current system date/time. Move "sleep 5; date" To sCmd // Start each command Get ComQuickCmdSend Of hoSsh1 sCmd To iSsh1Channel If (iSsh1Channel < 0) Begin Get ComLastErrorText Of hoSsh1 To sTemp1 Showln sTemp1 Procedure_Return End // For brevity, we're not checking the return values here: Get ComQuickCmdSend Of hoSsh2 sCmd To iSsh2Channel Get ComQuickCmdSend Of hoSsh3 sCmd To iSsh3Channel // OK, at this point the command is running simultaneously on each server. // Now collect the results of each command. Move 50 To iPollTimeoutMs Move 0 To iNumFinished // Note: You would rewrite this code to use arrays. Move False To iSsh1Finished Move False To iSsh2Finished Move False To iSsh3Finished 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. If (iSsh1Finished <> True) Begin Get ComQuickCmdCheck Of hoSsh1 iPollTimeoutMs To iChannel If (iChannel = -2) Begin Get ComLastErrorText Of hoSsh1 To sTemp1 Showln sTemp1 Procedure_Return End If (iChannel = iSsh1Channel) Begin Showln "---- ssh1 channel " iChannel " finished ----" Get ComGetReceivedText Of hoSsh1 iChannel "ansi" To sTemp1 Showln sTemp1 Move (iNumFinished + 1) To iNumFinished Move True To iSsh1Finished End End If (iSsh2Finished <> True) Begin Get ComQuickCmdCheck Of hoSsh2 iPollTimeoutMs To iChannel If (iChannel = -2) Begin Get ComLastErrorText Of hoSsh2 To sTemp1 Showln sTemp1 Procedure_Return End If (iChannel = iSsh2Channel) Begin Showln "---- ssh2 channel " iChannel " finished ----" Get ComGetReceivedText Of hoSsh2 iChannel "ansi" To sTemp1 Showln sTemp1 Move (iNumFinished + 1) To iNumFinished Move True To iSsh2Finished End End If (iSsh3Finished <> True) Begin Get ComQuickCmdCheck Of hoSsh3 iPollTimeoutMs To iChannel If (iChannel = -2) Begin Get ComLastErrorText Of hoSsh3 To sTemp1 Showln sTemp1 Procedure_Return End If (iChannel = iSsh3Channel) Begin Showln "---- ssh3 channel " iChannel " finished ----" Get ComGetReceivedText Of hoSsh3 iChannel "ansi" To sTemp1 Showln sTemp1 Move (iNumFinished + 1) To iNumFinished Move True To iSsh3Finished End End Loop // -------------- // Sample output: // ---- ssh2 channel 101 finished ---- // Fri Dec 23 00:25:48 UTC 2016 // // ---- ssh3 channel 102 finished ---- // Thu Dec 22 18:25:12 CST 2016 // // ---- ssh1 channel 100 finished ---- // Thu Dec 22 18:25:48 CST 2016 End_Procedure |
© 2000-2024 Chilkat Software, Inc. All Rights Reserved.