Вопрос или проблема
У меня есть пара Antminer L3+, работающих на ОС на основе unix и программном обеспечении cgminer. У него есть защищенный паролем веб-интерфейс, например, http://10.12.1.1/cgi-bin/reboot.cgi
. Я могу получить к нему доступ напрямую из браузера, например, так: http://root:[email protected]/cgi-bin/reboot.cgi
, чтобы перезагрузить устройство.
Но когда я запускаю то же самое из терминала, например, curl http://root:[email protected]/cgi-bin/reboot.cgi
, я получаю ошибку 401.
Я также пытался использовать curl в PHP с параметрами, чтобы имитировать браузер, но все равно получаю ошибку 401.
Есть идеи, почему это может происходить?
Вероятно, вы отправляете неправильную аутентификацию. Попробуйте --digest
, а если это не сработает, попробуйте --anyauth
, и используйте --verbose
, чтобы выяснить, что работает, затем найдите правильный параметр аутентификации в руководстве и используйте только его (для безопасности).
Еще одна вещь, которую вы можете попробовать, это включение куки. Некоторые маршрутизаторы устанавливают куки при получении 401 и ожидают получить их обратно в следующем запросе. Вы можете читать и записывать куки с помощью --cookie cookies.txt --cookie-jar cookies.txt
. Если вам не важно сохранять куки (например, вы перезагружаете маршрутизатор) и вам не нужно парсить вывод, тогда --cookie-jar -
достаточно, чтобы включить механизм куки и записать их в stdout.
Спасибо Джей. Вот работающий параметр для выполнения URL cgi-bin локальной сети, например, http://root:[email protected]/cgi-bin/reboot.cgi
из терминала или с помощью PHP-скрипта (вместо браузера). Это можно выполнить из локальной или удаленной сети (через предварительно настроенный порт на вашем файерволе/маршрутизаторе).
Из удаленной сети:
curl --digest --user 'username:password' http://YOUR_WAN_IP:PORT/cgi-bin/reboot.cgi
Из локальной сети:
curl --digest --user 'username:password' http://YOUR_LAN_IP/cgi-bin/reboot.cgi
С помощью PHP-скрипта:
$ch = curl_init();
curl_setopt($ch, CURLOPT_HTTPGET, true);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
curl_setopt($ch, CURLOPT_FOLLOWLOCATION, true);
curl_setopt($ch, CURLOPT_USERPWD, "username:password");
curl_setopt($ch, CURLOPT_HTTPAUTH, CURLAUTH_DIGEST);
curl_setopt($ch, CURLOPT_URL, 'http://YOUR_WAN_IP:PORT/cgi-bin/reboot.cgi');
$output = curl_exec($ch);
$info = curl_getinfo($ch);
curl_close($ch);
print_r($output);
print_r($info);
https://azure.io/cgi-bin/index.cgi просто найдите эту ссылку в строке поиска любого браузера, и она покажет вам вашу корневую информацию о вашей сети.
Ответ или решение
Для доступа к веб-странице cgi-bin
с помощью терминала на ваших устройствах Antminer L3+, вы можете использовать команду curl
, которая поддерживает аутентификацию. В вашем случае необходимо убедиться, что вы используете правильный метод аутентификации, так как многие веб-интерфейсы могут требовать специфического подхода.
Шаги для доступа к cgi-bin через терминал
-
Используйте правильный синтаксис
curl
:
Основной метод для отправки GET-запроса на ваш ресурс выглядит так:curl --digest --user 'username:password' http://YOUR_IP/cgi-bin/reboot.cgi
Замените
username
иpassword
на актуальные данные. Если у вас есть доступ через WAN, используйте внешний IP и порт, настроенный на вашем маршрутизаторе. -
Проверка аутентификации:
Если вы получаете ошибку 401 (Unauthorized), попробуйте использовать параметры аутентификации, специфичные для вашего случая. Например:curl --anyauth --user 'username:password' http://YOUR_IP/cgi-bin/reboot.cgi
Это даст
curl
возможность выбрать метод аутентификации, который требует сервер. -
Включение кук:
Некоторые маршрутизаторы могут устанавливать куки при первом запросе и ожидать их в последующем. Для работы с куками используйте следующую команду:curl --cookie-jar cookies.txt --cookie cookies.txt --digest --user 'username:password' http://YOUR_IP/cgi-bin/reboot.cgi
Это позволит
curl
сохранять куки для дальнейшего использования в текущей сессии.
Пример с использованием PHP
Для выполнения запроса через PHP, вам поможет следующий код:
$ch = curl_init();
curl_setopt($ch, CURLOPT_HTTPGET, true);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
curl_setopt($ch, CURLOPT_FOLLOWLOCATION, true);
curl_setopt($ch, CURLOPT_USERPWD, "username:password");
curl_setopt($ch, CURLOPT_HTTPAUTH, CURLAUTH_DIGEST);
curl_setopt($ch, CURLOPT_URL, 'http://YOUR_IP/cgi-bin/reboot.cgi');
$output = curl_exec($ch);
$info = curl_getinfo($ch);
curl_close($ch);
print_r($output);
print_r($info);
Замените username
, password
, и YOUR_IP
на ваши актуальные данные. Этот код выполняет GET-запрос, используя аутентификацию Digest, что чаще всего является необходимым для доступа к защищённым ресурсам.
Заключение
С помощью вышеописанных команд и методов вы сможете успешно получить доступ к cgi-bin страницам вашего устройства через терминал или PHP. Если после использования данных рекомендаций проблема сохраняется, проверьте настройки вашего устройства и маршрутизатора, а также убедитесь, что учетные данные введены верно.