diff --git a/src/Services/AgentService.php b/src/Services/AgentService.php index 400efbd..a9f0b9b 100644 --- a/src/Services/AgentService.php +++ b/src/Services/AgentService.php @@ -49,9 +49,12 @@ class AgentService $script = file_get_contents($scriptPath); + $b64 = base64_encode($script); $remoteCommand = sprintf( - 'echo %s | base64 -d | bash -s -- %s %s 2>&1', - escapeshellarg(base64_encode($script)), + 'echo %s | base64 -d | (sudo -n true 2>/dev/null && sudo bash -s -- %s %s || bash -s -- %s %s) 2>&1', + escapeshellarg($b64), + escapeshellarg($serverUrl), + escapeshellarg($agentKey), escapeshellarg($serverUrl), escapeshellarg($agentKey) ); @@ -67,17 +70,17 @@ class AgentService $output = trim($result['output']); $exitStatus = $result['exit_status'] ?? -1; + $path = '/usr/local/bin/servermanager-agent'; if ($exitStatus !== 0) { + $lastLines = implode("\n", array_slice(explode("\n", $output), -20)); return [ 'success' => false, 'error' => 'Agent installation failed on remote server', - 'output' => $output, + 'output' => $lastLines, ]; } - $path = '/usr/local/bin/servermanager-agent'; - $serverModel = new \ServerManager\Models\Server(); $serverModel->setAgentInstalled($serverId, true, $path); @@ -116,7 +119,7 @@ class AgentService $script = file_get_contents($scriptPath); $remoteCommand = sprintf( - 'echo %s | base64 -d | bash 2>&1', + 'echo %s | base64 -d | sudo bash 2>&1', escapeshellarg(base64_encode($script)) ); diff --git a/views/servers/show.php b/views/servers/show.php index d03fd1a..0deab5e 100755 --- a/views/servers/show.php +++ b/views/servers/show.php @@ -445,8 +445,9 @@ function confirmAgentAction() { showToast('success', action === 'install' ? 'Agent installed successfully.' : 'Agent uninstalled successfully.'); setTimeout(() => location.reload(), 1500); } else { - showToast('error', data.error || (action === 'install' ? 'Installation failed.' : 'Uninstallation failed.')); - if (data.output) console.log('Output:', data.output); + let msg = data.error || (action === 'install' ? 'Installation failed.' : 'Uninstallation failed.'); + if (data.output) msg += ' Output: ' + data.output.replace(/\n/g, ' | '); + showToast('error', msg); } }) .catch(err => {