Я пытаюсь запустить команду на удаленном сервере с помощью модуля ssh2. Журналы показывают, что аутентификация прошла успешно, а ssh2_exec возвращает поток (документированное поведение успеха).
Server, SSHing на сервере, так как одна и та же учетная запись вручную (через шпаклёвку) позволяет мне успешно запустить команду.
Однако при запуске моего кода мои журналы показывают, что команда никогда не вызывается.
Вот код управления сеансом:
function connect() {
$hnd = \ssh2_connect(Config\PORTAL_SERVER);
if (!$hnd) return false;
if (!\ssh2_auth_password($hnd, Config\PORTAL_USER, Config\PORTAL_PASSWD))
return false;
return $hnd;
}
function run($api, $function, $args, $hnd) {
$args = implode(' ', $args);
$stream = \ssh2_exec($hnd, "api $api $function $args");
\stream_set_blocking($stream, true);
$response = \stream_get_contents($stream);
fclose($stream);
return \json_decode($response);
}
И код, вызывающий его:
$hnd = Portal\connect();
$result = Portal\run(
'users',
'all',
array(),
$hnd
);
json_decode получает пустую строку, так как поток никогда ничего не возвращает. Я могу только предположить, что я как-то неправильно меняю свой поток, но это не объяснит, что моя команда не работает.
Я идиот.
Путь не устанавливается правильно для пользователя, когда начинается сеанс... Я переключился на абсолютные пути, и все идеально.