Мне нужно перезагрузить встроенную систему через веб-страницу локальной сети (скрипт CGI). У меня есть страница, построенная, и она вызывает скрипт на станции (которая является (apache) хостом веб-страницы). Этот сценарий должен вызывать команду перезагрузки, но он не работает.
Одна попытка была такая:
#!/bin/bash
sudo reboot
Он работал, когда запускался из командной строки, когда входил телнет, но не при вызове CGI. Ошибка (из /var/log/apache2/error.log
) была:
sudo: tty отсутствует и не задана программа askpass
Хорошо, достаточно справедливо. Я попытался добавить NOPASSWD
в файл sudoers для правильного пользователя, но без сигары. Поэтому я попробовал этот метод, который я нашел в Интернете. Это также работало при запуске из командной строки, но не с сервера. Я подумал, что не получу ту же ошибку, так как это было через Telnet, и это не так.
#!/usr/bin/expect
set name [lindex $argv 0]
spawn telnet $name
expect "login:"
send "<user>\r"
expect "Password:"
send "Reformed\r"
send "sudo reboot\r"
Ошибка была:
искаженный заголовок из скрипта. Неверный заголовок = ОШИБКА !!: WebInterfaceReboot
(Если я жестко закодирую IP-адрес в сценарии, он выдаст ошибку Bad header=spawn telnet 192.168.0.79 #: WebInterfaceReboot send: spawn id exp6 not open while executing "send "<username>\r"" (file ./reboot2.sh" line 9)
)
Я включил ведение журнала cgi на сервере, и «подробный» журнал CGI больше не помог:
%% [Wed Oct 09 09:24:25 2013] POST /cgi-bin/WebInterfaceReboot HTTP/1.1
%% 500 /usr/lib/cgi-bin/WebInterfaceReboot
%request
Host: 192.168.0.79
Connection: keep-alive
Content-Length: 19
Cache-Control: max-age=0
Authorization: Basic aGhwOlJlZm9ybWVk
Accept: text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8
Origin: http:// 192.168.0.79
User-Agent: Mozilla/5.0 (X11; Linux i686) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/29.0.1547.76 Safari/537.36
Content-Type: application/x-www-form-urlencoded
DNT: 1
Referer: http:// 192.168.0.79/cgi-bin/WebInterfaceReboot
Accept-Encoding: gzip,deflate,sdch
Accept-Language: en-US,en;q=0.8
RebootButton=Reboot
%response
ERROR!!
Примечание. «RebootButton» - это название кнопки, нажатой на странице для вызова сценария оболочки.
Я почти уверен, что это не настоящий CGI-скрипт, поскольку, когда я тестировал первую реализацию, скрипт явно работал. Какие изменения я должен внести в сценарий или установку, чтобы команда перезагрузки могла работать таким образом?