LINUX.ORG.RU
ФорумAdmin

Debian,удалённое отключение и перезагрузка.

 ,


1

1

Здравствуйте.Хочу через php скрипт организовать перезагрузку или отключение сервера(пока так).

<?php $e = «/usr/bin/nohup /kap/adress.sh > /dev/null 2>&1 &»; shell_exec(«$e»); ?>

файл - adress.sh:

TIME3=`date +'%X'`

SENSORS='ss -ln'

DATE=`date +'%d.%m.%Y'` DATE_TEST='Службы_слушают_адреса_тест__'$DATE'_ВЫПОЛНЕН_В_'$TIME3 DATE_TIME= $SENSORS | mail -s $DATE_TEST 2014@yandex.ru

Этот работает.При запуске php скрипта,на «мыло» приходят данные.Ну а если в adress.sh выставить одну команду,на перезагр. или отключения(sudo reboot или sudo poweroff).То со скрипта php ни чего не происходит,а при конкретном действии над adress.sh эти команды выполняются? Подскажите пожалуйста,как правильно сделать запись чтоб это работало?


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

1.Прикрути логирование. Как то более конкретней(проще) пожалуйста спрашивайте или отвечайте(с расчётом что я ещё нуб )) ).

2. Пробывал я и с sudo и без sudo.(или под вопросом что то другое имели введу).

Спасибо.

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

1. Ты перенаправляешь результаты работы скрипта в /dev/null, а попробуй писать в файл и посмотри, может там какая ошибка есть. Либо в самом скрипте сделай перенаправление stdout и stderr в файл.

2. При выполнении команды через sudo запрашивается пароль пользователя, в твоем случае sudo пароль запросить не может и падает. Можно отключить запрос пароля, но это не безопасно. Можно дать права пользователю на выполнение команд reboot и poweroff (по дефолту это только руту можно), тут много вариантов.

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

А у ТСа есть «мастер»-хост? Ему, судя по всему, нужно при необходимости гасить одну машину (может она у него вообще одна), стоит ли тут заморачиваться, тем более с puppet? =)

alozovskoy ★★★★★ ()

Ребята разобрался с ssh и putty.Получилось всё.Но мне кажется давать команды серверу через php скрипты это более безопасней(но геморойней) чем использовать ssh.Или это всё детский лепет,использовать надо(лучше)ssh защитившись изменением порта со стандартного 22 на любой другой и защитившись file2ban скриптом?

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

Но мне кажется давать команды серверу через php скрипты это более безопасней(но геморойней) чем использовать ssh

Ты post/get параметры шифруешь ключами? Если нет - ни разу не безопасней.

Или это всё детский лепет,использовать надо(лучше)ssh защитившись изменением порта со стандартного 22 на любой другой и защитившись file2ban скриптом?

fail2ban как и смена порта - не обязательны. Если боишься что тебе пароль сбрутят сделай авторизацию ТОЛЬКО по ключу.

Быстрый HOWTO для Putty можно глянуть тут

Как только начнет пускать тебя по ключу без ввода пароля - просто прибиваешь пароль у пользователя в /etc/shadow(меняешь второе поле на знак !) - и вуаля.

Как вариант - руту пароль оставить(мало ли, придется логиниться с консоли самого сервера), запрещаешь логин рута по ssh, даешь пользователю право на su(обычно достаточно включения в группу wheel, но ты лучше почитай документацию по своему дистрибутиву - поможет лучше понять как всё работает) - если такого нет, создаешь его. Пароль этому пользователю - не назначаешь, авторизируешься в него - по ключу. Ну а дальше логика та же...

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

Или это всё детский лепет,использовать надо(лучше)ssh

Если тебе и только тебе нужно выключать/перегружать ровно одну удаленную машину, то:
1) включи в ssh авторизацию по ключам. Для этого пропиши «PubkeyAuthentication yes» в /etc/ssh/sshd_config на удаленной машине (скорее всего, такая строка там уже есть). С учетом того, что ты по твоим собственым словам нуб, на всякий случай уточню, что эта строка пишется без кавычек, а изменение конфига ssh вступит в силу только после того, как sshd его перечитает;
2) создай пару ключей для root'а на удаленной машине. Для этого выполни на клиентской машине ssh-keygen -f ~/.ssh/root@remotehostname. На запрос пароля ответь в меру своей паранойи, но имей в виду, что забытую парольную фразу восстановить невозможно (надо будет создавать ключи по-новому). Вместо root@remotehostname в принципе может быть любое допустимое имя файла, но как по мне, удобнее называть файлы ключей в виде <user>@<host>;
3) добавь содержимое файла ~/.ssh/root@remotehostname.pub с клиентской машины (это публичный ключ из созданной выше пары ключей) в /root/.ssh/authorized_keys на удаленной машине. На всякий случай — владельцем этого файла в итоге должен быть root, права доступа к файлу — 640;
4) разреши целевой машине пускать root'а только с авторизацией по вышесозданным ключам. Для этого в /etc/ssh/sshd_config на целевой машине должны быть следующие строки:

PubkeyAuthentication yes
PermitRootLogin without-password
ChallengeResponseAuthentication no

После всех эти действий с клиентской машины можно будет выключать/перегружать удаленную командами ssh -i ~/.ssh/root@remotehostname root@remotehostname shutdown и ssh -i ~/.ssh/root@remotehostname root@remotehostname shutdown -r соответственно. Подробности всей этой магии в man sshd_config и man ssh-keygen.

Опять же на всякий случай — все эти действия не лишают возможности изменить порт и добавить fail2ban.

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

Ему, судя по всему, нужно при необходимости гасить одну машину

ТС, судя по всему, юный ксакеп, специалист по ректальной танзиллэктомии.

Для выполнения команд есть ssh. мыло и ребут из php подозрительно пахнут

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

:) Учусь.Мужики,спасибо вам Всем!Что достойно терпите таких учеников как я. Пока вопросов нет,хватает и того что вы написали.Спасибо!

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