Столкнулся с задачей:
Есть вебсервер, на котором апач работает от пользователя WWW. На страницу нужно добавить кнопку, которая будет перезапускать демон на удаленном убунту-сервере.
С вебсервера перезагружать нужный демон можно вот так:
ssh root@192.168.1.2 "/etc/init.d/pentagon restart"
Но через shell_exec так сделать нельзя, так как апач запущен не от рута, а от виртуального, несуществующего пользователя, по этому SSH по ключах у него не работает. Сгенерировать ему ключи тоже невозможно.
Как быть? Дайте совет.
> С вебсервера перезагружать нужный демон можно вот так:
> ssh root@192.168.1.2 "/etc/init.d/pentagon restart"
> Но через shell_exec так сделать нельзя, так как апач запущен не от
> рута, а от виртуального, несуществующего пользователярут ему и не нужен.
> по этому SSH по ключах у него не работает.
> Как быть? Дайте совет.1) man ssh
2) Скриптом создаете файлик, по крону проверяете наличие файлика, удаляете его, делаете перезапуск.>Сгенерировать ему ключи тоже невозможно.
Утверждение не соответствует действительности.
Сгенерировать можно что угодно где угодно.
> рут ему и не нужен.Плохо выразился. На руте сгенерирован SSH-ключ, который заброшен на второй сервер. То есть фактически в текущий момент до второго сервера без пароля можно достучаться только от рута.
> 1) man ssh
> 2) Скриптом создаете файлик, по крону проверяете наличие файлика, удаляете его, делаете
> перезапуск.Первый пункт сейчас проштудирую. Второй неоптимальный - делать постоянную проверку наличия файла при том, что кнопка на сайте может быть нажата раз в пару дней как по мне не очень хорошее решение.
> Утверждение не соответствует действительности. Сгенерировать можно что угодно где угодно.
Как сгенерировать ключи пользователю, которого не существует, и у которого нет никаких прав?
> делать постоянную проверку наличия файла при том, что кнопка на сайте может быть нажата раз в пару дней как по мне не очень хорошее решение.для этого придумали cron
> Как сгенерировать ключи пользователю, которого не существует, и у которого нет никаких прав?
вы вообще знаете как работает аутентификация по ключам?
> Как сгенерировать ключи пользователю, которого не существует, и у которого нет никаких
> прав?Идиотская затея - давать рутовый вход куда бы то ни было юзеру www. Тем более, через PHP Ты путаешь "запрещён login" и "существует". Если есть UID (есть запись в /etc/passwd), значит существует. А значит, ему можно отдать файл с ключом На целевой машине впиши "/etc/init.d/pentagon restart" в inetd.conf/xinetd/socket unit, повесь на какой-нибудь порт 12345. Открываешь туда соединение - перезапускается твой pentagon.
Хотя по-уму следовало бы разобраться в его глюках, чтобы перезапускать не приходилось или чтобы он сам себя перезапускал.
>[оверквотинг удален]
> [li] Идиотская затея - давать рутовый вход куда бы то ни было
> юзеру www. Тем более, через PHP
> [li] Ты путаешь "запрещён login" и "существует". Если есть UID (есть запись
> в /etc/passwd), значит существует. А значит, ему можно отдать файл с
> ключом
> На целевой машине впиши "/etc/init.d/pentagon restart" в inetd.conf/xinetd/socket unit,
> повесь на какой-нибудь порт 12345. Открываешь туда соединение - перезапускается твой
> pentagon.
> Хотя по-уму следовало бы разобраться в его глюках, чтобы перезапускать не приходилось
> или чтобы он сам себя перезапускал.как всегда - не в бровь, а в глаз ☺
> Столкнулся с задачей:
> Есть вебсервер, на котором апач работает от пользователя WWW. На страницу нужно
> добавить кнопку, которая будет перезапускать демон на удаленном убунту-сервере.
> С вебсервера перезагружать нужный демон можно вот так:
> ssh root@192.168.1.2 "/etc/init.d/pentagon restart"
> Но через shell_exec так сделать нельзя, так как апач запущен не от
> рута, а от виртуального, несуществующего пользователя, по этому SSH по ключах
> у него не работает. Сгенерировать ему ключи тоже невозможно.
> Как быть? Дайте совет.sudo?
например так:<?phpprint ("<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