The London Perl and Raku Workshop takes place on 26th Oct 2024. If your company depends on Perl, please consider sponsoring and/or attending.

NAME

ec2-cssh - Cluster SSH your EC2 instances

INSTALLATION

This is a standard Perl package.

On system Perl:

  cpan -i App::EC2Cssh

With cpanm:

  cpanm App::EC2Cssh

SYNOPSIS

Cssh using a predefined set called 'frontend' in your config file (see CONFIGURATION section):

  ec2-ssh -s=frontends

OPTIONS

--set=<name>, -s=<name>

Required. Use the set <name> of instances defined in your config file

--verbose, -v

Go in verbose mode

--config=<config file>, -c=<config file>

Use the config file instead of the automatically detected one (see CONFIGURATION section)

--help, -h

Display this help.

CONFIGURATION

ec2-cssh relies on a configuration files to hold your Amazon AWS EC2 settings, your machine set settings and the command line to use to ClusterSSH onto your machines.

If no --config option is given, ec2-cssh will look for the following files in order: .ec2ssh.conf, $HOME/.ec2ssh.conf, /etc/ec2ssh.conf

Linux Config example:

In this example, only one instances set 'mytagvalue' defined. This set will generate all the instances with a tag 'mytag' having a value 'myvalue'

 {
    'ec2_config' => {
        AWSAccessKeyId => '.. Your access Key ID ..',
        SecretAccessKey => '.. Your secret access Key ..',
        region => 'eu-west-1',
        debug => 0,
    },
    'ec2_sets' => {
        'mytagvalue' => {
            'Filter' =>  [
                [ 'tag:mytag' , 'myvalue' ],
            ]
        }
    },
    'command' => q|cssh { join(' ' , map{ '<your username>@'.$_.':22' }  @hosts ) }|
  }

Then you can do:

  $ ec2-ssh -s=mytagvalue

OSX Config example:

Only the command changes. See Section 'INSTALLING cssh' for more help on CsshX for Mac OSX.

 {
    .. Same a Linux. Only this changes: ..
    'command' => q|csshX --screen 1 { join(' ' , map{ '<your username>@'.$_.':22' }  @hosts ) }|
 }

INSTANCES SET CONFIGURATION

The format of a set configuration follows the following structure:

  'set' => {
     InstanceId => [ 'instanceID1' , 'instanceID2', ... ],
     Filters => [
        [ 'Filter name', 'Filter value1' , 'Filter value 2', ... ],
        .. Other filters ..
     ]
   }

Both InstanceID and Filters are optional.

See http://docs.aws.amazon.com/AWSEC2/latest/CommandLineReference/ApiReference-cmd-DescribeInstances.html for all available ways of filtering instances.

SPLIT CONFIGURATION

Having a config file is fine, but what if you want to keep your credentials secret, and have your EC2 sets of machine in a .ec2cssh.conf file per projects?

With ec2-cssh, this is possible by splitting the configuration in severl files. For instance, you can have:

.ec2cssh.conf in your project directory:
  {
     'ec2_config' => { region => 'project-specific-aws-region' },
     'ec2_sets' => { 'projectspecificset' => ... },
  }
$HOME/.ec2cssh.conf:
  {
     'ec2_config' => { .. Your credentials },
     'ec2_sets' => { 'asetilike' => ... }
  }
/etc/ec2cssh.conf:
  {
    ec2_sets => { 'asystemwideset' => .. }
    command => '.. System wide Cssh command ..'
  }

INSTALLING cssh

To install cssh on Linux (Debian):

  sudo  apt-get install clusterssh

To install CsshX for Mac OSX:

   brew install csshx

ABOUT

This code is released under the same licence as Perl5 itself.

Copyright Jerome Eteve (jerome@eteve.net) 2015.

SEE ALSO

Cluster SSH (Linux) Homepage: https://github.com/duncs/clusterssh/wiki

CsshX (Mac OSX) Homepage: https://github.com/brockgr/csshx