/** * @param string $commandName * @param string $target * @param array $targetConfig * @param array $inputCommand * @param array $userHomeDir * @return string */ public function executeCommand($commandName, $target, $targetConfig, $inputCommand, $userHomeDir) { $remoteCommand = str_replace([sprintf('\'%s\'', $commandName), sprintf('target=\'%s\'', $target)], [$commandName, sprintf('root=%s', $targetConfig['root'])], $inputCommand); $remoteCommand = sprintf('%s %s', $targetConfig['console'], $remoteCommand); $key = null; if (array_key_exists('password', $targetConfig)) { $key = $targetConfig['password']; } if (!$key) { $key = new RSA(); if (array_key_exists('passphrase', $targetConfig['keys'])) { $passphrase = $targetConfig['keys']['passphrase']; $passphrase = realpath(preg_replace('/~/', $userHomeDir, $passphrase, 1)); $key->setPassword(trim(file_get_contents($passphrase))); } $private = $targetConfig['keys']['private']; $private = realpath(preg_replace('/~/', $userHomeDir, $private, 1)); if (!$key->loadKey(trim(file_get_contents($private)))) { return $this->getTranslator()->trans('commands.site.debug.messages.private-key'); } } $ssh = new SSH2($targetConfig['host'], $targetConfig['port']); if (!$ssh->login($targetConfig['user'], $key)) { return sprintf('%s - %s', $ssh->getExitStatus(), $ssh->getErrors()); } else { return $ssh->exec($remoteCommand); } }