LINUX.ORG.RU

[Perl] Не работает File::Remote под Apache


0

1

Сабж. Из консоли — работает на ура, а вот пускаю под Apachem (как cgi-bin или же через mod_perl — один фиг) — не работает, вываливается на вызове open.

Код примерно такой:

use File::Remote qw(:replace);
setrsh(«/usr/bin/ssh»);
setrcp(«/usr/bin/scp»);
open(XXX, «root\@xxx.ru:/root/xxx.txt») or die «Failed to open xxx.txt»;
@lines = <XXX>;
close(XXX);
@lines = reverse(@lines);
print @lines;

Ответ на: комментарий от Compas

хм… а ооп-вариант работает?

если запустить из консоли под тем же юзверем, под которым работает апач, работать будет?

может, апач прибивает какую-то жизненно важную переменную окружения, необходимую этим утилитам?…

arsi ★★★★★ ()
Ответ на: комментарий от Compas

Возможно Apache запрещает скриптам выходить выше SERVER_ROOT или как он там называется.

Ну и еще можно попробовать способом, где не применяется replace перлового open.

Olegymous ★★ ()
Ответ на: комментарий от arsi

>если запустить из консоли под тем же юзверем, под которым работает апач, работать будет?
Кстати да, у каждого юзера есть ~/.ssh/known_hosts. И если хост не известен, то задаётся вопрос, на который у апача нет ответа.

Olegymous ★★ ()
Ответ на: комментарий от arsi

> хм… а ооп-вариант работает?

ООП-вариант пробовал, работает так же: из консоли работает, с Апача — нет.

может, апач прибивает какую-то жизненно важную переменную окружения, необходимую этим утилитам?…


Вот я и хочу узнать.

Compas ()
Ответ на: комментарий от Olegymous

> Кстати да, у каждого юзера есть ~/.ssh/known_hosts. И если хост не известен, то задаётся вопрос, на который у апача нет ответа.

Я пробовал на /root/.ssh давать 777. Хотя может правда у апача нет доступа к /root/. Надо может создать папку юзера apache и туда .ssh/known_hosts положить.

Compas ()
Ответ на: комментарий от Compas

/root тут не при делах и 777 стоит убрать. Логинимся с консоли под юзера апача, запускаем скрипт и смотрим что он выдает. Должен быть вопрос от ssh клиента с ответом yes/no. Пишем yes. Пробуем второй раз. Если теперь нет вопроса то и под апачем должно работать.

Olegymous ★★ ()
Ответ на: комментарий от Compas

> Я пробовал на /root/.ssh давать 777.

омг :)

создай какую-нибудь директорию для апача (ну можешь ей 777 ради юмора поставить) и скопируй туда .ssh с валидным known_hosts, а в перле перед вызовом открытия файла добавь $ENV{HOME} = '/path/to/apache/home'. или, емнип, в апаче в конфиге можно какой-то директивой установить переменные окружения.

arsi ★★★★★ ()
Ответ на: комментарий от Olegymous

Про юзера apache спасибо! Не догадался. Перенёс .ssh под него, всё заработало.

Compas ()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.