Я создаю веб-элемент управления, который позволит нашим младшим ИТ-специалистам управлять прошивками на наших телефонах LifeSize. В настоящее время мы делаем это путем загрузки новой прошивки на центральный сервер, а затем запускаем эту команду для каждого телефона, который мы хотим обновить
cat new_firmware.cramfs | ssh -T cli@1.1.1.1 "upgrade all"
При этом запрашивается пароль, а затем загружается прошивка. Работает как чемпион, но для того, чтобы найти все IP-адреса всех телефонов, кому-то нужны инструменты CLI, SSH-доступ к этому серверу и терпение.
Похоже, мы застряли с паролем, тестирование с сертификатами было катастрофическим. Используемое устройство - это не полноценный компьютер, а телефон с крошечной проприетарной встроенной ОС.
Я работаю над сценарием PHP, который может выполнять итерации по всем телефонам, но в основном дублирует эту функцию. Это то, что я до сих пор:
<?php
$firmware_filename = "new_firmware.cramfs";
$firmware_stream = fopen($firmware_filename,"rb");
$ssh_connection = ssh2_connect("1.1.1.1", 22);
ssh2_auth_password($ssh_connection, "cli", "password");
$ssh_stream = ssh2_exec($ssh_connection,'upgrade all');
$written = stream_copy_to_stream($firmware_stream,$ssh_stream,-1);
if($written != filesize($full_filename)){
echo "The file is " . filesize($firmware_filename) . " bytes, I only wrote $written" . PHP_EOL;
}else{
echo "All Good" . PHP_EOL;
}
?>
Но это всегда возвращает
The file is 26988590 bytes, I only wrote 8192
И обновление не выполняется правильно.