Chilkat HOME Android™ AutoIt C C# C++ Chilkat2-Python CkPython Classic ASP DataFlex Delphi DLL Go Java Node.js Objective-C PHP Extension Perl PowerBuilder PowerShell PureBasic Ruby SQL Server Swift Tcl Unicode C Unicode C++ VB.NET VBScript Visual Basic 6.0 Visual FoxPro Xojo Plugin
(Objective-C) SSH Parallel Remote Commands on Multiple ServersSee more SSH ExamplesShows how to execute a command in parallel on multiple servers.
#import <CkoSsh.h> #import <NSString.h> // 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.. CkoSsh *ssh1 = [[CkoSsh alloc] init]; CkoSsh *ssh2 = [[CkoSsh alloc] init]; CkoSsh *ssh3 = [[CkoSsh alloc] init]; int port = 22; BOOL success = [ssh1 Connect: @"ssh-server1.com" port: [NSNumber numberWithInt: port]]; if (success != YES) { NSLog(@"%@",ssh1.LastErrorText); return; } // Authenticate using login/password: success = [ssh1 AuthenticatePw: @"sshLogin1" password: @"sshPassword1"]; if (success != YES) { NSLog(@"%@",ssh1.LastErrorText); return; } // Connect and authenticate with 2 more servers. // For brevity, the success/failure won't be checked... success = [ssh2 Connect: @"ssh-server2.com" port: [NSNumber numberWithInt: port]]; success = [ssh2 AuthenticatePw: @"sshLogin2" password: @"sshPassword2"]; success = [ssh3 Connect: @"ssh-server3.com" port: [NSNumber numberWithInt: port]]; success = [ssh3 AuthenticatePw: @"sshLogin3" password: @"sshPassword3"]; // 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. NSString *cmd = @"sleep 5; date"; // Start each command int ssh1Channel = [[ssh1 QuickCmdSend: cmd] intValue]; if (ssh1Channel < 0) { NSLog(@"%@",ssh1.LastErrorText); return; } // For brevity, we're not checking the return values here: int ssh2Channel = [[ssh2 QuickCmdSend: cmd] intValue]; int ssh3Channel = [[ssh3 QuickCmdSend: cmd] intValue]; // OK, at this point the command is running simultaneously on each server. // Now collect the results of each command. int pollTimeoutMs = 50; int numFinished = 0; int channel; // Note: You would rewrite this code to use arrays. BOOL ssh1Finished = NO; BOOL ssh2Finished = NO; BOOL ssh3Finished = NO; 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. if (ssh1Finished != YES) { channel = [[ssh1 QuickCmdCheck: [NSNumber numberWithInt: pollTimeoutMs]] intValue]; if (channel == -2) { NSLog(@"%@",ssh1.LastErrorText); return; } if (channel == ssh1Channel) { NSLog(@"%@%d%@",@"---- ssh1 channel ",channel,@" finished ----"); NSLog(@"%@",[ssh1 GetReceivedText: [NSNumber numberWithInt: channel] charset: @"ansi"]); numFinished = numFinished + 1; ssh1Finished = YES; } } if (ssh2Finished != YES) { channel = [[ssh2 QuickCmdCheck: [NSNumber numberWithInt: pollTimeoutMs]] intValue]; if (channel == -2) { NSLog(@"%@",ssh2.LastErrorText); return; } if (channel == ssh2Channel) { NSLog(@"%@%d%@",@"---- ssh2 channel ",channel,@" finished ----"); NSLog(@"%@",[ssh2 GetReceivedText: [NSNumber numberWithInt: channel] charset: @"ansi"]); numFinished = numFinished + 1; ssh2Finished = YES; } } if (ssh3Finished != YES) { channel = [[ssh3 QuickCmdCheck: [NSNumber numberWithInt: pollTimeoutMs]] intValue]; if (channel == -2) { NSLog(@"%@",ssh3.LastErrorText); return; } if (channel == ssh3Channel) { NSLog(@"%@%d%@",@"---- ssh3 channel ",channel,@" finished ----"); NSLog(@"%@",[ssh3 GetReceivedText: [NSNumber numberWithInt: channel] charset: @"ansi"]); numFinished = numFinished + 1; ssh3Finished = YES; } } } // -------------- // 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 |
© 2000-2025 Chilkat Software, Inc. All Rights Reserved.