SSH Fehler nach 5.3 Stable update

Die Base Datei wird geladen wenn ich ein weiteres include hinzufüge :


include '.\phpseclib\Net\SSH2.php';
include '.\phpseclib\Crypt\Base.php';

$ssh = new  phpseclib\Net\SSH2($ip);

Dann meckert er natürlich die nächste Datei an die er laden muss :

Fatal error: Uncaught Error: Class ‚phpseclib\Crypt\RC4‘ not found in C:\ProgramData\Symcon\scripts\phpseclib\Net\SSH2.php:2083

Natürlich könnte ich jetzt jede Menge includes einbauen aber das kann es ja nicht sein.
Meine Versuche mit include_path haben auch nichts gebracht.

Kann mir jemand einen Tipp geben ?

folgendes skript funktioniert bei mir ohne troubs:


<?php
include ('Net/SSH2.php');
 $commandline = '/sbin/shutdown -r now'."
";

  $ssh = new Net_SSH2('X.X.X.X');
    if (!$ssh->login('username', 'pwd')) {
    exit('Login Failed');
  }

echo $ssh->exec($commandline."
");
$ssh->write('exit '."
");
$ssh->disconnect();

Windows 10, bibliothek liegt unter /UserData/symcon/scripts/Net
lief wieder ohne Änderungen an diesem code nur durch Austausch der phpseclib Bibliothek…
bg
hoep

@hoep herzlichen Dank fürs Feedback. Ich nehme an Du nutzt die 1.0.18. Die werde ich jetzt auch versuchen

Other Branches: 2.0 and master
The 2.0 branch has pretty much the exact same API as the 1.0 branch, save for that it is namespaced, uses PHP5-style constructors (thereby avoiding E_DEPRECATED errors) and requires the use of an autoloader. A few examples.

The master branch has an unstable API that is subject to change. The master branch will eventually turn into 3.0, at which point, this website will be re-designed with an emphasis on that version.

@Nall-chan Ich hätte gestern mehr Mut für das unbekannte zeigen sollen (Ich bin nicht so fit in Bezug auf Module und Klassen)

Ich habe mir heute morgen nochmal Deinen Autoloader angeschaut und einfach mal kopiert und siehe da es funktioniert auf Anhieb auch ohne den Rest Deines Moduls :slight_smile:

$autoloader = new AutoloaderPHPseclib('Net\SSH2');
$autoloader->register();
$ssh = new  phpseclib\Net\SSH2($ip);

if (!$ssh->login($username, $password)) // Hier der echte Login
{
    exit('Login Failed');
}


class AutoloaderPHPseclib
{
    private $namespace;

    public function __construct($namespace = null)
    {
        $this->namespace = $namespace;
    }

    public function register()
    {
        spl_autoload_register([$this, 'loadClass']);
    }

    public function loadClass($className)
    {
        $libpath = __DIR__ . DIRECTORY_SEPARATOR . '..' . DIRECTORY_SEPARATOR . 'libs' . DIRECTORY_SEPARATOR;
        $includes[] = $libpath . 'phpseclib';
        set_include_path(get_include_path() . PATH_SEPARATOR . implode(PATH_SEPARATOR, $includes));
        $file = str_replace('\\', DIRECTORY_SEPARATOR, $className) . '.php';
        require_once $file;
        restore_include_path();
    }
}

Die Library liegt unterhalb des Symcon Script Ordners in dem Folder „phpseclib“ Eins zu Eins kopiert von http://phpseclib.sourceforge.net/2.0.html

Moin,

die 2.x hatte ich damals gar nicht gesehen und mit der 1.0.18 lief alles auf Anhieb :slight_smile:

Ergänzend noch ein Hinweis falls der Remote Shutdown eines Win 10 Systems nicht funktionieren sollte.

Ein Remote Shutdown ist nur möglich, wenn der nachfolgende Registry Eintrag durchgeführt wird.
UAC-Filter für Windows-Fernwartung abschalten | WindowsPro Der Befehl kann über die Eingabeaufforderung ausgeführt werden.

reg add HKLM\SOFTWARE\Microsoft\Windows\CurrentVersion\Policies\system /v LocalAccountTokenFilterPolicy /t REG_DWORD /d 1 /f

Danach hat die nächtliche Verteilung der Acronis Sicherungen auf andere PC inkl. Shutdown funktioniert :wink:

Gruß
Hans

So der Upgrade hat jetzt ohne Probleme funktioniert und meine SSH2 Bibliotheken funktionieren alle
Nochmals herzlichen Dank an die Community für die Hilfe.

Hallo BestEx,

mit Deinen Code konnte ich meine Abfrage vom Raspberry wieder zum laufen bringen, vielen Dank (gilt auch für Nall-chan).

Aber ich bekomme nicht mehr die Abfrage von meinen Draytek zum laufen, ich nutze von https://phpseclib.com/ die Version 3.

Mit diesen Code:

$ip = ('192.xxx.x.x:22'); // IP vom Draytek
$username = 'xxxx';  //der richtige Username ist hier ein zutragen
$password = 'xxxx';  //das richtige Passwort ist hier ein zutragen


$autoloader = new AutoloaderPHPseclib('Net\SSH2');
$autoloader->register();


class AutoloaderPHPseclib
{
    private $namespace;

    public function __construct($namespace = null)
    {
        $this->namespace = $namespace;
    }

    public function register()
    {
        spl_autoload_register([$this, 'loadClass']);
    }

    public function loadClass($className)
    {
        $libpath = __DIR__ . DIRECTORY_SEPARATOR . '..' . DIRECTORY_SEPARATOR . 'libs' . DIRECTORY_SEPARATOR;
        $includes[] = $libpath . 'phpseclib';
        set_include_path(get_include_path() . PATH_SEPARATOR . implode(PATH_SEPARATOR, $includes));
        $file = str_replace('\\', DIRECTORY_SEPARATOR, $className) . '.php';
        require_once $file;
        ini_restore('include_path');
    }
} 


$ssh = new  phpseclib3\Net\SSH2($ip);
if ($expected != $ssh->getServerPublicHostKey()) {
    throw new \Exception('Host key verification failed');
}
$ssh = new  phpseclib3\Net\SSH2($ip);

if (!$ssh->login($username, $password)) // Hier der echte Login
{
    exit('Login Failed');
}

bekomme ich nach 60sec. folgenden Fehlercode angezeigt:

Fatal error:  Maximum execution time of 30 seconds exceeded in C:\ProgramData\Symcon\scripts\phpseclib3\Net\SSH2.php on line 3245

Selbst wenn ich den Login weglasse, kommt die gleiche Fehlermeldung nach 60sec.

Beim ersten Aufruf per Putty, bekomme ich folgende Mitteilung:

Draytek Key.PNG

Wenn ich die mit „Y“ bestätige, funktioniert das einloggen per ssh2 einwandfrei.

Wenn ich es richtig gelesen habe auf der Seite https://phpseclib.com/docs/connect

soll der folgende Code, ja das selbe machen?

use phpseclib3\Net\SSH2;

$ssh = new SSH2('localhost', 22);
if ($expected != $ssh->getServerPublicHostKey()) {
    throw new \Exception('Host key verification failed');
}

Aber da bekomme ich ja immer die Fehlermeldung nach 60sec.

Wer kann mir auf die Sprünge helfen, das auch wieder meine Abfrage per ssh2 beim Draytek funktioniert?

Heion09

Auf dem Rechner mit dem du die Verbindung aufbaust (in deinem Fall dein IP Symcon Server) muss das Zertifikat für die SSH Verbindung installiert sein. Beim Installieren kommt eine Sicherheitsabfrage die manuell Bestätigt werden muss.

Versuch mal auf deinem Symcon Server mit Putty auf das Ziel zuzugreifen. Nach dem manuellen Bestätigen müsste das dann über Symcon auch funktionieren

Hallo BestEx,

Auf dem Symcon Server, habe ich es schon mit Putty ausprobiert, die Abfrage kam auch, die ich auch bestätigt habe.
Aber irgendwie interessiert es Phpseclib nicht, wie gesagt Phpseclib bleibt mit der Fehlermeldung hängen.

Tschau Hein09

Da fällt mir im Moment erstmal nichts dazu ein SRY

Sent from my Pixel 4 using Tapatalk

trotzdem vielen Dank BestEx.

Vielleicht kann mich ja ein anderer, auf den richtigen Pfad bringen?

Damit ich es wieder zum laufen bekomme.

Hein09