URL: https://www.opennet.dev/cgi-bin/openforum/vsluhboard.cgi
Форум: vsluhforumID1
Нить номер: 96867
[ Назад ]

Исходное сообщение
"Выполнение команды по SSH, запускаемой через PHP"

Отправлено Opus , 13-Апр-17 11:46 
Столкнулся с задачей:
Есть вебсервер, на котором апач работает от пользователя WWW. На страницу нужно добавить кнопку, которая будет перезапускать демон на удаленном убунту-сервере.
С вебсервера перезагружать нужный демон можно вот так:
ssh root@192.168.1.2 "/etc/init.d/pentagon restart"
Но через shell_exec так сделать нельзя, так как апач запущен не от рута, а от виртуального, несуществующего пользователя, по этому SSH по ключах у него не работает. Сгенерировать ему ключи тоже невозможно.
Как быть? Дайте совет.

Содержание

Сообщения в этом обсуждении
"Выполнение команды по SSH, запускаемой через PHP"
Отправлено PavelR , 13-Апр-17 12:19 
> С вебсервера перезагружать нужный демон можно вот так:
> ssh root@192.168.1.2 "/etc/init.d/pentagon restart"
> Но через shell_exec так сделать нельзя, так как апач запущен не от
> рута, а от виртуального, несуществующего пользователя

рут ему и не нужен.

> по этому SSH по ключах у него не работает.
> Как быть? Дайте совет.

1) man ssh
2) Скриптом создаете файлик, по крону проверяете наличие файлика, удаляете его, делаете перезапуск.

>Сгенерировать ему ключи тоже невозможно.

Утверждение не соответствует действительности.
Сгенерировать можно что угодно где угодно.



"Выполнение команды по SSH, запускаемой через PHP"
Отправлено Opus , 13-Апр-17 12:57 
> рут ему и не нужен.

Плохо выразился. На руте сгенерирован SSH-ключ, который заброшен на второй сервер. То есть фактически в текущий момент до второго сервера без пароля можно достучаться только от рута.

> 1) man ssh
> 2) Скриптом создаете файлик, по крону проверяете наличие файлика, удаляете его, делаете
> перезапуск.

Первый пункт сейчас проштудирую. Второй неоптимальный - делать постоянную проверку наличия файла при том, что кнопка на сайте может быть нажата раз в пару дней как по мне не очень хорошее решение.

> Утверждение не соответствует действительности. Сгенерировать можно что угодно где угодно.

Как сгенерировать ключи пользователю, которого не существует, и у которого нет никаких прав?


"Выполнение команды по SSH, запускаемой через PHP"
Отправлено ALex_hha , 13-Апр-17 14:09 
> делать постоянную проверку наличия файла при том, что кнопка на сайте может быть нажата раз в пару дней как по мне не очень хорошее решение.

для этого придумали cron

> Как сгенерировать ключи пользователю, которого не существует, и у которого нет никаких прав?

вы вообще знаете как работает аутентификация по ключам?


"Выполнение команды по SSH, запускаемой через PHP"
Отправлено ACCA , 13-Апр-17 19:46 
> Как сгенерировать ключи пользователю, которого не существует, и у которого нет никаких
> прав?

  • Идиотская затея - давать рутовый вход куда бы то ни было юзеру www. Тем более, через PHP
  • Ты путаешь "запрещён login" и "существует". Если есть UID (есть запись в /etc/passwd), значит существует. А значит, ему можно отдать файл с ключом

    На целевой машине впиши "/etc/init.d/pentagon restart" в inetd.conf/xinetd/socket unit, повесь на какой-нибудь порт 12345. Открываешь туда соединение - перезапускается твой pentagon.

    Хотя по-уму следовало бы разобраться в его глюках, чтобы перезапускать не приходилось или чтобы он сам себя перезапускал.


  • "Выполнение команды по SSH, запускаемой через PHP"
    Отправлено Аноним , 14-Апр-17 04:09 
    >[оверквотинг удален]
    > [li] Идиотская затея - давать рутовый вход куда бы то ни было
    > юзеру www. Тем более, через PHP
    > [li] Ты путаешь "запрещён login" и "существует". Если есть UID (есть запись
    > в /etc/passwd), значит существует. А значит, ему можно отдать файл с
    > ключом
    > На целевой машине впиши "/etc/init.d/pentagon restart" в inetd.conf/xinetd/socket unit,
    > повесь на какой-нибудь порт 12345. Открываешь туда соединение - перезапускается твой
    > pentagon.
    > Хотя по-уму следовало бы разобраться в его глюках, чтобы перезапускать не приходилось
    > или чтобы он сам себя перезапускал.

    как всегда - не в бровь, а в глаз ☺


    "Выполнение команды по SSH, запускаемой через PHP"
    Отправлено михалыч , 13-Апр-17 17:50 
    > Столкнулся с задачей:
    > Есть вебсервер, на котором апач работает от пользователя WWW. На страницу нужно
    > добавить кнопку, которая будет перезапускать демон на удаленном убунту-сервере.
    > С вебсервера перезагружать нужный демон можно вот так:
    > ssh root@192.168.1.2 "/etc/init.d/pentagon restart"
    > Но через shell_exec так сделать нельзя, так как апач запущен не от
    > рута, а от виртуального, несуществующего пользователя, по этому SSH по ключах
    > у него не работает. Сгенерировать ему ключи тоже невозможно.
    > Как быть? Дайте совет.

    sudo?
    например так:

    <?php

    print ("<form method=post><input type=submit name=reboot value=OK></form>");
    if ( isset($_POST['reboot']) ) { exec ("/usr/local/bin/sudo /path/to/reload.sh"); }

    ?>


    ну и в файл sudoers добавить
    www ALL=NOPASSWD: /path/to/reload.sh

    а уж в reload.sh и запускать то что нужно
    ssh root@192.168.1.2 "/etc/init.d/pentagon restart