Security Advisories (1)
CVE-2026-94140 (2026-10-21)

Rex versions through 1.16.1 for Perl accept an unknown SSH host key for remote rsync transfers because sync hardcodes StrictHostKeyChecking=no. Every remote branch of sync builds its ssh command with that option, for password authentication, for private-key authentication and for the fallback. The ssh options a caller sets through set_openssh_opt reach the OpenSSH transport but not this command, so there is no configuration that restores host key checking for the transfer. An attacker who can redirect the connection before the real host key is known presents their own and the transfer proceeds: under password authentication sync sends the connection password to that server, an upload writes the selected local files to it, and a download writes what it returns to the local destination.

NAME

Rex::Commands::Cloud - Cloud Management Commands

DESCRIPTION

With this Module you can manage different Cloud services. Currently it supports Amazon EC2, Jiffybox and OpenStack.

Version <= 1.0: All these functions will not be reported.

SYNOPSIS

use Rex::Commands::Cloud;

cloud_service "Amazon";
cloud_auth "your-access-key", "your-private-access-key";
cloud_region "ec2.eu-west-1.amazonaws.com";

task "list", sub {
  print Dumper cloud_instance_list;
  print Dumper cloud_volume_list;
};

task "create", sub {
  my $vol_id = cloud_volume create => { size => 1, zone => "eu-west-1a", };

  cloud_instance create => {
      image_id => "ami-xxxxxxx",
      name    => "test01",
      key    => "my-key",
      volume  => $vol_id,
      zone    => "eu-west-1a",
    };
};

task "destroy", sub {
  cloud_volume detach => "vol-xxxxxxx";
  cloud_volume delete => "vol-xxxxxxx";

  cloud_instance terminate => "i-xxxxxxx";
};

EXPORTED FUNCTIONS

cloud_service($cloud_service)

Define which cloud service to use.

Services
Amazon
Jiffybox
OpenStack

cloud_auth($param1, $param2, ...)

Set the authentication for the cloudservice.

For example for Amazon it is:

cloud_auth($access_key, $secret_access_key);

For JiffyBox:

cloud_auth($auth_key);

For OpenStack:

cloud_auth(
 tenant_name => 'tenant',
 username    => 'user',
 password    => 'password',
);

cloud_region($region)

Set the cloud region.

cloud_instance_list

Get all instances of a cloud service.

task "list", sub {
  for my $instance (cloud_instance_list()) {
    say "Arch  : " . $instance->{"architecture"};
    say "IP   : " . $instance->{"ip"};
    say "ID   : " . $instance->{"id"};
    say "State : " . $instance->{"state"};
  }
};

There are some parameters for this function that can change the gathering of ip addresses for some cloud providers (like OpenStack).

task "list", sub {
  my @instances = cloud_instance_list
                     private_network => 'private',
                     public_network  => 'public',
                     public_ip_type  => 'floating',
                     private_ip_type => 'fixed';
};

cloud_volume_list

Get all volumes of a cloud service.

task "list-volumes", sub {
  for my $volume (cloud_volume_list()) {
    say "ID     : " . $volume->{"id"};
    say "Zone    : " . $volume->{"zone"};
    say "State   : " . $volume->{"state"};
    say "Attached : " . $volume->{"attached_to"};
  }
};

cloud_network_list

Get all networks of a cloud service.

task "network-list", sub {
  for my $network (cloud_network_list()) {
    say "network  : " . $network->{network};
    say "name    : " . $network->{name};
    say "id     : " . $network->{id};
  }
};

cloud_image_list

Get a list of all available cloud images.

cloud_upload_key

Upload public SSH key to cloud provider

private_key '~/.ssh/mykey
public_key  '~/.ssh/mykey.pub';

task "cloudprovider", sub {
  cloud_upload_key;

  cloud_instance create => {
    ...
  };
};

get_cloud_instances_as_group

Get a list of all running instances of a cloud service. This can be used for a group definition.

group fe  => "fe01", "fe02", "fe03";
group ec2 => get_cloud_instances_as_group();

cloud_instance($action, $data)

This function controls all aspects of a cloud instance.

create

Create a new instance.

cloud_instance create => {
    image_id => "ami-xxxxxx",
    key    => "ssh-key",
    name    => "fe-ec2-01",  # name is not necessary
    volume  => "vol-yyyyy",  # volume is not necessary
    zone    => "eu-west-1a",  # zone is not necessary
    floating_ip  => "89.39.38.160" # floating_ip is not necessary
  };

start

Start an existing instance

cloud_instance start => "instance-id";

stop

Stop an existing instance

cloud_instance stop => "instance-id";

terminate

Terminate an instance. This will destroy all data and remove the instance.

cloud_instance terminate => "i-zzzzzzz";

get_cloud_regions

Returns all regions as an array.

cloud_volume($action , $data)

This function controls all aspects of a cloud volume.

create

Create a new volume. Size is in Gigabytes.

task "create-vol", sub {
  my $vol_id = cloud_volume create => { size => 1, zone => "eu-west-1a", };
};

attach

Attach a volume to an instance.

task "attach-vol", sub {
  cloud_volume attach => "vol-xxxxxx", to => "server-id";
};

detach

Detach a volume from an instance.

task "detach-vol", sub {
  cloud_volume detach => "vol-xxxxxx", from => "server-id";
};

delete

Delete a volume. This will destroy all data.

task "delete-vol", sub {
  cloud_volume delete => "vol-xxxxxx";
};

get_cloud_floating_ip

Returns first available floating IP

task "get_floating_ip", sub {

  my $ip = get_cloud_floating_ip;

  my $instance = cloud_instance create => {
     image_id => 'edffd57d-82bf-4ffe-b9e8-af22563741bf',
     name => 'instance1',
     plan_id => 17,
     floating_ip => $ip
   };
};

cloud_network

create

Create a new network.

task "create-net", sub {
  my $net_id = cloud_network create => { cidr => '192.168.0.0/24', name => "mynetwork", };
};

delete

Delete a network.

task "delete-net", sub {
  cloud_network delete => '18a4ccf8-f14a-a10d-1af4-4ac7fee08a81';
};

get_cloud_availability_zones

Returns all availability zones of a cloud services. If available.

task "get-zones", sub {
  print Dumper get_cloud_availability_zones;
};

get_cloud_plans

Retrieve information of the available cloud plans. If supported.

get_cloud_operating_systems

Retrieve information of the available cloud plans. If supported.

cloud_object

Returns the cloud object itself.