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