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::Service - Manage System Services

DESCRIPTION

With this module you can manage Linux services.

SYNOPSIS

use Rex::Commands::Service

service apache2 => "start";

service apache2 => "stop";

service apache2 => "restart";

service apache2 => "status";

service apache2 => "reload";

service apache2 => "ensure", "started";

service apache2 => "ensure", "stopped";

EXPORTED FUNCTIONS

service($service, $action, [$option])

The service function accepts 2 parameters. The first is the service name and the second the action you want to perform.

starting a service
task "start-service", "server01", sub {
  service apache2 => "start";
};
stopping a service
task "stop-service", "server01", sub {
  service apache2 => "stop";
};
restarting a service
task "restart-service", "server01", sub {
  service apache2 => "restart";
};
checking status of a service
task "status-service", "server01", sub {
  if( service apache2 => "status" ) {
    say "Apache2 is running";
  }
  else {
    say "Apache2 is not running";
  }
};
reloading a service
task "reload-service", "server01", sub {
  service apache2 => "reload";
};
ensure that a service will started at boot time
task "prepare", sub {
  service "apache2",
    ensure => "started";
};
ensure that a service will NOT be started.
task "prepare", sub {
  service "apache2",
    ensure => "stopped";
};

If you need to define a custom command for start, stop, restart, reload or status you can do this with the corresponding options.

task "prepare", sub {
  service "apache2",
    ensure  => "started",
    start   => "/usr/local/bin/httpd -f /etc/my/httpd.conf",
    stop    => "killall httpd",
    status  => "ps -efww | grep httpd",
    restart => "killall httpd && /usr/local/bin/httpd -f /etc/my/httpd.conf",
    reload  => "killall httpd && /usr/local/bin/httpd -f /etc/my/httpd.conf";
};

This function supports the following hooks:

before_${action}

For example: before_start, before_stop, before_restart

This gets executed right before the given service action. All original parameters are passed to it.

after_${action}

For example: after_start, after_stop, after_restart

This gets executed right after the given service action. All original parameters, and any returned results are passed to it.

service_provider_for $os => $type;

To set another service provider as the default, use this function.

user "root";

group "db" => "db[01..10]";
service_provider_for SunOS => "svcadm";

task "start", group => "db", sub {
   service ssh => "restart";
};

This example will restart the ssh service via svcadm (but only on SunOS, on other operating systems it will use the default).