Nasıl bir PHP web çağrısı ile bir komut satırı aracı SSH değiştirebilirsiniz?

2 Cevap php

Ben bizim junior IT personeli bizim LifeSize telefonlar firmware yönetmenizi sağlayacak bir web denetimi inşa ediyorum. Şu anda biz sonra yükseltmek istediğiniz her telefon için bu komutu çalıştıran merkezi bir sunucu üzerine yeni firmware yükleyerek bunu

cat new_firmware.cramfs | ssh -T cli@1.1.1.1 "upgrade all"

Bu şifre, daha sonra firmware yükler bana soruyor. Bir şampiyon gibi çalışır, ama tüm telefonlarının tüm IP'leri bakmak için CLI araçları ile rahat birisi, bu sunucuya SSH erişimi ve sabır alır.

Biz belgeleri ile test felaket olmuştur bir parola ile oturum ile sıkışmış konum gibi görünüyor. Üzerinde hareket ediliyor Cihaz küçük, özel gömülü bir işletim sistemi çalıştıran bir telefon var, tam teşekküllü bir bilgisayar değildir.

Tüm telefonlar üzerinde yineleme, ancak temelde bu işlevi yinelenen bir PHP komut dosyası üzerinde çalışıyorum. Bu ben bugüne kadar ne var:

<?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;
}
?>

Ancak bu her zaman döner

The file is 26988590 bytes, I only wrote 8192

Ve yükseltme doğru devam etmez.

2 Cevap

Peki sadece diyebilirsiniz

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

ve sonra değişkenler kullanarak değiştirin:

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

bu sizin için bir çözümdür?

Eğer. ssh-dizine sertifika dosyasını yerleştirerek ssh-erişimini otomatik hale getirebilirsiniz. Oku yaklaşık SSH login without password.

selamlar

Eğer deneyebilirsiniz birkaç şey vardır:

  1. Copy the file first, then run the command on the now-local file.
  2. Başarıyla tüm dosyayı yazdık kadar bir 8k tampon doldurma olduğunuzu varsayarak, bir döngü içinde yazma deneyin
  3. Kolay bir şekilde dışarı atın ve bir şifre girmeniz gerekmez yüzden sadece ssh anahtarları kurmak, ve exec komut dosyanızı doğrudan komutları