Merge branch 'ent-5135-No-funciona-la-exploracion-SNMP-remota' into 'develop'

Added port option on server configuration to be used when connecting to execution server

See merge request artica/pandorafms!3012
This commit is contained in:
Daniel Rodriguez 2020-01-17 14:40:58 +01:00
commit 96eebe4310
12 changed files with 126 additions and 41 deletions

View File

@ -1,5 +1,6 @@
START TRANSACTION; START TRANSACTION;
ALTER TABLE `tserver` ADD COLUMN `port` int(5) unsigned NOT NULL default 0;
ALTER TABLE `tmap` ADD COLUMN `id_group_map` INT(10) UNSIGNED NOT NULL default 0; ALTER TABLE `tmap` ADD COLUMN `id_group_map` INT(10) UNSIGNED NOT NULL default 0;
ALTER TABLE `tevent_filter` MODIFY `severity` TEXT NOT NULL; ALTER TABLE `tevent_filter` MODIFY `severity` TEXT NOT NULL;

View File

@ -1778,6 +1778,7 @@ ALTER TABLE tserver_export_data MODIFY `module_name` varchar(600) NOT NULL defau
-- Table `tserver` -- Table `tserver`
-- --------------------------------------------------------------------- -- ---------------------------------------------------------------------
ALTER TABLE tserver ADD COLUMN exec_proxy tinyint(1) UNSIGNED NOT NULL default 0; ALTER TABLE tserver ADD COLUMN exec_proxy tinyint(1) UNSIGNED NOT NULL default 0;
ALTER TABLE `tserver` ADD COLUMN `port` int(5) unsigned NOT NULL default 0;
-- --------------------------------------------------------------------- -- ---------------------------------------------------------------------
-- Table `tevent_response` -- Table `tevent_response`

View File

@ -45,3 +45,22 @@ switch ($wizard_section) {
*/ */
require 'agent_wizard.'.$wizard_section.'.php'; require 'agent_wizard.'.$wizard_section.'.php';
?>
<script language="javascript" type="text/javascript">
function satellite_remote_warn(id_satellite, remote)
{
if(!remote)
{
$('#server_to_exec option[value='+id_satellite+']').prop('disabled', true);
$('#satellite_remote_tip').removeAttr("style").show();
}
else
{
$('#satellite_remote_tip').removeAttr("style").hide();
}
}
</script>

View File

@ -738,11 +738,16 @@ $servers_to_exec[0] = __('Local console');
if (enterprise_installed()) { if (enterprise_installed()) {
enterprise_include_once('include/functions_satellite.php'); enterprise_include_once('include/functions_satellite.php');
$rows = get_proxy_servers(true); $rows = get_proxy_servers();
// Check if satellite server has remote configuration enabled.
$satellite_remote = config_agents_has_remote_configuration($id_agent);
foreach ($rows as $row) { foreach ($rows as $row) {
if ($row['server_type'] != 13) { if ($row['server_type'] != 13) {
$s_type = ' (Standard)'; $s_type = ' (Standard)';
} else { } else {
$id_satellite = $row['id_server'];
$s_type = ' (Satellite)'; $s_type = ' (Satellite)';
} }
@ -750,8 +755,16 @@ if (enterprise_installed()) {
} }
} }
$table->data[1][2] = '<b>'.__('Server to execute command').'</b>'; $table->data[1][2] = '<b>'.__('Server to execute command').'</b>'.ui_print_help_icon('agent_snmp_explorer_tab', true);
$table->data[1][3] = html_print_select($servers_to_exec, 'server_to_exec', $server_to_exec, '', '', '', true); $table->data[1][3] = html_print_select(
$servers_to_exec,
'server_to_exec',
$server_to_exec,
'satellite_remote_warn('.$id_satellite.','.$satellite_remote.')',
'',
'',
true
);
$snmp_versions['1'] = 'v. 1'; $snmp_versions['1'] = 'v. 1';
$snmp_versions['2'] = 'v. 2'; $snmp_versions['2'] = 'v. 2';
@ -1020,6 +1033,8 @@ ui_require_javascript_file('pandora_modules');
var separator = '<?php echo $separator; ?>'; var separator = '<?php echo $separator; ?>';
$(document).ready (function () { $(document).ready (function () {
$('#server_to_exec option').trigger('change');
$("#walk_form").submit(function() { $("#walk_form").submit(function() {
$("#oid_loading").show (); $("#oid_loading").show ();
}); });

View File

@ -492,7 +492,7 @@ if (enterprise_installed()) {
} }
} }
$table->data[1][2] = '<b>'.__('Server to execute command').'</b>'; $table->data[1][2] = '<b>'.__('Server to execute command').'</b>'.ui_print_help_icon('agent_snmp_explorer_tab', true);
$table->data[1][2] .= '<span id=satellite_remote_tip>'.ui_print_help_tip(__('In order to use remote executions you need to enable remote execution in satellite server'), true, 'images/tip_help.png', false, 'display:').'</span>'; $table->data[1][2] .= '<span id=satellite_remote_tip>'.ui_print_help_tip(__('In order to use remote executions you need to enable remote execution in satellite server'), true, 'images/tip_help.png', false, 'display:').'</span>';
$table->data[1][4] = html_print_select( $table->data[1][4] = html_print_select(
$servers_to_exec, $servers_to_exec,
@ -734,20 +734,5 @@ function snmp_changed_by_multiple_snmp (event, id_snmp, selected) {
"json"); "json");
} }
function satellite_remote_warn(id_satellite, remote)
{
if(!remote)
{
$('#server_to_exec option[value='+id_satellite+']').prop('disabled', true);
$('#satellite_remote_tip').removeAttr("style").show();
}
else
{
$('#satellite_remote_tip').removeAttr("style").hide();
}
}
/* ]]> */ /* ]]> */
</script> </script>

View File

@ -64,12 +64,22 @@ if ($wmiexplore) {
$processes_name_field = 1; $processes_name_field = 1;
if (enterprise_installed() && (int) $server_to_exec != 0) { if (enterprise_installed() && (int) $server_to_exec != 0) {
$server_data = db_get_row('tserver', 'id_server', $server_to_exec); $server_data = db_get_row('tserver', 'id_server', $server_to_exec);
if (empty($server_data['port'])) {
exec( exec(
'ssh pandora_exec_proxy@'.$server_data['ip_address']." 'ssh pandora_exec_proxy@'.$server_data['ip_address']."
'".$wmi_processes."'", '".$wmi_processes."'",
$output, $output,
$rc $rc
); );
} else {
exec(
'ssh -p '.$server_data['port'].' pandora_exec_proxy@'.$server_data['ip_address']."
'".$wmi_processes."'",
$output,
$rc
);
}
} else { } else {
exec($wmi_processes, $output); exec($wmi_processes, $output);
} }
@ -110,12 +120,21 @@ if ($wmiexplore) {
'id_server', 'id_server',
$server_to_exec $server_to_exec
); );
if (empty($server_data['port'])) {
exec( exec(
'ssh pandora_exec_proxy@'.$server_data['ip_address']." 'ssh pandora_exec_proxy@'.$server_data['ip_address']."
'".$wmi_services."'", '".$wmi_services."'",
$output, $output,
$rc $rc
); );
} else {
exec(
'ssh -p '.$server_data['port'].' pandora_exec_proxy@'.$server_data['ip_address']."
'".$wmi_services."'",
$output,
$rc
);
}
} else { } else {
exec($wmi_services, $output); exec($wmi_services, $output);
} }
@ -145,12 +164,22 @@ if ($wmiexplore) {
if (enterprise_installed() && (int) $server_to_exec != 0) { if (enterprise_installed() && (int) $server_to_exec != 0) {
$server_data = db_get_row('tserver', 'id_server', $server_to_exec); $server_data = db_get_row('tserver', 'id_server', $server_to_exec);
if (empty($server_data['port'])) {
exec( exec(
'ssh pandora_exec_proxy@'.$server_data['ip_address']." 'ssh pandora_exec_proxy@'.$server_data['ip_address']."
'".$wmi_disks."'", '".$wmi_disks."'",
$output, $output,
$rc $rc
); );
} else {
exec(
'ssh -p '.$server_data['port'].' pandora_exec_proxy@'.$server_data['ip_address']."
'".$wmi_disks."'",
$output,
$rc
);
}
} else { } else {
exec($wmi_disks, $output); exec($wmi_disks, $output);
} }
@ -469,7 +498,7 @@ if (enterprise_installed()) {
} }
} }
$table->data[2][0] = '<b>'.__('Server to execute command').'</b>'; $table->data[2][0] = '<b>'.__('Server to execute command').'</b>'.ui_print_help_icon('agent_snmp_explorer_tab', true);
$table->data[2][1] = html_print_select( $table->data[2][1] = html_print_select(
$servers_to_exec, $servers_to_exec,
'server_to_exec', 'server_to_exec',

View File

@ -32,7 +32,7 @@ if (isset($_GET['server'])) {
$id_server = get_parameter_get('server'); $id_server = get_parameter_get('server');
// Headers // Headers
ui_print_page_header(__('Update Server'), 'images/gm_servers.png', false, 'servers', true); ui_print_page_header(__('Update Server'), 'images/gm_servers.png', false, 'servers', true);
$sql = sprintf('SELECT name, ip_address, description, server_type, exec_proxy FROM tserver WHERE id_server = %d', $id_server); $sql = sprintf('SELECT name, ip_address, description, server_type, exec_proxy, port FROM tserver WHERE id_server = %d', $id_server);
$row = db_get_row_sql($sql); $row = db_get_row_sql($sql);
echo '<form name="servers" method="POST" action="index.php?sec=gservers&sec2=godmode/servers/modificar_server&update=1">'; echo '<form name="servers" method="POST" action="index.php?sec=gservers&sec2=godmode/servers/modificar_server&update=1">';
html_print_input_hidden('server', $id_server); html_print_input_hidden('server', $id_server);
@ -75,6 +75,14 @@ if (isset($_GET['server'])) {
__('Exec Server'), __('Exec Server'),
html_print_checkbox('exec_proxy', 1, $row['exec_proxy'], true), html_print_checkbox('exec_proxy', 1, $row['exec_proxy'], true),
]; ];
$port_number = empty($row['port']) ? '' : $row['port'];
$table->data[] = [
__('Port'),
html_print_input_text('port', $port_number, '', 10, 0, true).ui_print_help_tip(__('Leave blank to use SSH default port (22)'), true),
];
if ($row['exec_proxy']) { if ($row['exec_proxy']) {
$table->data[] = [ $table->data[] = [
__('Check Exec Server'), __('Check Exec Server'),
@ -136,11 +144,15 @@ if (isset($_GET['server'])) {
$description = get_parameter_post('description'); $description = get_parameter_post('description');
$id_server = get_parameter_post('server'); $id_server = get_parameter_post('server');
$exec_proxy = get_parameter_post('exec_proxy'); $exec_proxy = get_parameter_post('exec_proxy');
$port = get_parameter_post('port');
$port_number = empty($port) ? 0 : $port;
$values = [ $values = [
'ip_address' => $address, 'ip_address' => $address,
'description' => $description, 'description' => $description,
'exec_proxy' => $exec_proxy, 'exec_proxy' => $exec_proxy,
'port' => $port_number,
]; ];
$result = db_process_sql_update('tserver', $values, ['id_server' => $id_server]); $result = db_process_sql_update('tserver', $values, ['id_server' => $id_server]);
if ($result !== false) { if ($result !== false) {

View File

@ -101,6 +101,10 @@ foreach ($servers as $server) {
$data[2] .= ui_print_help_tip(__('This is a master server'), true); $data[2] .= ui_print_help_tip(__('This is a master server'), true);
} }
if ($server['exec_proxy'] == 1) {
$data[2] .= html_print_image('images/star.png', true, ['title' => __('Exec server enabled')]);
}
// $data[2] .= '</span> <span style="font-size:8px;"> v' .. '</span>'; // $data[2] .= '</span> <span style="font-size:8px;"> v' .. '</span>';
switch ($server['type']) { switch ($server['type']) {
case 'snmp': case 'snmp':

View File

@ -956,7 +956,11 @@ if ($perform_event_response) {
break; break;
} }
if (empty($server_data['port'])) {
system('ssh pandora_exec_proxy@'.$server_data['ip_address'].' "'.$timeout_bin.' '.$command_timeout.' '.io_safe_output($command).' 2>&1"', $ret_val); system('ssh pandora_exec_proxy@'.$server_data['ip_address'].' "'.$timeout_bin.' '.$command_timeout.' '.io_safe_output($command).' 2>&1"', $ret_val);
} else {
system('ssh -p '.$server_data['port'].' pandora_exec_proxy@'.$server_data['ip_address'].' "'.$timeout_bin.' '.$command_timeout.' '.io_safe_output($command).' 2>&1"', $ret_val);
}
} }
} else { } else {
switch (PHP_OS) { switch (PHP_OS) {

View File

@ -1994,7 +1994,12 @@ function get_snmpwalk(
if (enterprise_installed()) { if (enterprise_installed()) {
if ($server_to_exec != 0) { if ($server_to_exec != 0) {
$server_data = db_get_row('tserver', 'id_server', $server_to_exec); $server_data = db_get_row('tserver', 'id_server', $server_to_exec);
if (empty($server_data['port'])) {
exec('ssh pandora_exec_proxy@'.$server_data['ip_address'].' "'.$command_str.'"', $output, $rc); exec('ssh pandora_exec_proxy@'.$server_data['ip_address'].' "'.$command_str.'"', $output, $rc);
} else {
exec('ssh -p '.$server_data['port'].' pandora_exec_proxy@'.$server_data['ip_address'].' "'.$command_str.'"', $output, $rc);
}
} else { } else {
exec($command_str, $output, $rc); exec($command_str, $output, $rc);
} }

View File

@ -409,11 +409,20 @@ function snmp_browser_get_oid(
if ($server_to_exec != 0) { if ($server_to_exec != 0) {
$command_output = $snmptranslate_bin.' -m ALL -M +'.escapeshellarg($config['homedir'].'/attachment/mibs').' -Td '.escapeshellarg($oid); $command_output = $snmptranslate_bin.' -m ALL -M +'.escapeshellarg($config['homedir'].'/attachment/mibs').' -Td '.escapeshellarg($oid);
if (empty($server_data['port'])) {
exec( exec(
'ssh pandora_exec_proxy@'.$server_data['ip_address'].' "'.$command_output.'"', 'ssh pandora_exec_proxy@'.$server_data['ip_address'].' "'.$command_output.'"',
$translate_output, $translate_output,
$rc $rc
); );
} else {
exec(
'ssh -p '.$server_data['port'].' pandora_exec_proxy@'.$server_data['ip_address'].' "'.$command_output.'"',
$translate_output,
$rc
);
}
} else { } else {
exec( exec(
$snmptranslate_bin.' -m ALL -M +'.escapeshellarg($config['homedir'].'/attachment/mibs').' -Td '.escapeshellarg($oid), $snmptranslate_bin.' -m ALL -M +'.escapeshellarg($config['homedir'].'/attachment/mibs').' -Td '.escapeshellarg($oid),

View File

@ -1020,6 +1020,7 @@ CREATE TABLE IF NOT EXISTS `tserver` (
`server_keepalive` int(11) NOT NULL default 0, `server_keepalive` int(11) NOT NULL default 0,
`stat_utimestamp` bigint(20) NOT NULL default '0', `stat_utimestamp` bigint(20) NOT NULL default '0',
`exec_proxy` tinyint(1) UNSIGNED NOT NULL default 0, `exec_proxy` tinyint(1) UNSIGNED NOT NULL default 0,
`port` int(5) unsigned NOT NULL default 0,
PRIMARY KEY (`id_server`), PRIMARY KEY (`id_server`),
KEY `name` (`name`) KEY `name` (`name`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8; ) ENGINE=InnoDB DEFAULT CHARSET=utf8;