Как я могу заменить инструмент SSH командной строки на веб-вызов PHP? - PullRequest
0 голосов
/ 23 сентября 2009

Я создаю веб-элемент управления, который позволит нашим младшим ИТ-специалистам управлять прошивками на наших телефонах 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

И обновление не выполняется правильно.

Ответы [ 2 ]

1 голос
/ 23 сентября 2009

Ну, вы можете просто позвонить

system('cat new_firmware.cramfs | ssh -T cli@1.1.1.1 "upgrade all"');

и затем замените его своими переменными:

system('cat ' . $firmware . ' | ssh -T ' . $username . '@' . $host . ' "upgrade all"');

это решение для вас?

вы можете автоматизировать ssh-доступ, поместив файл сертификата в каталог .ssh. Читайте о SSH логин без пароля .

С уважением

0 голосов
/ 23 сентября 2009

Есть несколько вещей, которые вы можете попробовать:

  1. Сначала скопируйте файл, , затем , запустите команда для текущего локального файла.
  2. Предполагая, что вы заполняете буфер 8 КБ, попробуйте записать в цикле, пока вы не успешно записали весь файл
  3. Возьмите легкий выход и просто установите ssh-ключи, чтобы вам не нужно было вводить пароль, и выполняйте команды оболочки прямо из вашего скрипта
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...