Hallo,
das Script auf den vorherigen Seiten hat einige Zeit funktioniert, später nach einem DSM Update nicht mehr.
Socket ist eingerichtet und Telnet auf der Synology ist aktiviert.
Nun möchte ich das Script zum Herunterfahren wieder zum Laufen bekommen, allerdings komme ich nicht weiter.
So weit ich herausgefunden habe, ist das Problem, dass man per Telnet nicht mehr direkt mit root auf die Synology zugreifen kann. Somit habe ich wie folgt das Script angepasst:
Hallo,
ich versuche meine DS216 per Telnet herunterzufahren. Bekomme im Debug Fenster kryptische Zeichen angegeben. Wenn ich die Befehle „manuell“ eingebe funktioniert alles.
Man kann sich bei der Synology auch ohne Key-File einloggen - einfach mit User/PW.
Das kann die phpseclib auch.
Alternativ direkt über exec oder shell_exec von einem Linux/Raspberry. Gibt es einige Beispiel-Scripte hier im Forum.
Soweit ich mich erinnern kann, war (ist) Synology recht restriktiv seit DSM 6.0 bei direkten root-Zugängen.
Ein direkter Login als root mit Passwort wird i.d.R. verweigert. Die Keyfiles habe ich mir bereits vor längerer Zeit für den root-Zugang mit PuTTY/WinSCP angelegt.
Bei direkter Anmeldung als root >> ja, da will Synology eine Anmeldung mit Key-File.
Aber ich erlaube/empfehle auch nie eine direkte Anmeldung als root. SSH-Anmeldungen erlaube ich immer (egal, ob bei Geräten oder Servern) nur für normale User (und da ist mit den Default-Einstellungen bei Synology auch eine Anmeldung über User/PW möglich).
bei mir funktioniert das herunterfahren von meinem Synology auch nicht mehr.
Nun weiß ich leider nicht, ob es an einem Windows Update, IPS Update, oder einem Synology Update liegt
Nach stundenlanger Fehlersuche ist mir gerade folgendes aufgefallen:
Wenn ich die batch datei per doppelklick im explorer ausführe, fährt der Synology brav herunter.
Allerdings nicht im Script per :
IPS_Execute("C:/telnet/batch.bat","",true,false);
Es gibt keine Fehlermeldung, aber die batchdatei wird wohl nicht ausgeführt.
Irgendeinen Ratschlag für mich ?
Das ganze lief ja nun schon ein paar Jahre ohne Probleme.
Ich muss das Thema nochmal rausholen. Hab Version 6.2 auf meine Synology. wie kann ich aktuell per ssh, also aus IPS, einen shutdown durchführen bzw. das System starten?
Ja, das weiß ich. Jetzt scheitert es aber die root Rechte in einem Kommando zu bekommen. Denn bei root, möchte ssh ja immer noch das Passwort zur Bestätigung…
Der Versuch ein keyfile anzulegen wie hier scheitert bei mir, weil die synology nicht alle linux commandos kennt (nano, ls…) und ich dadurch die key-Datei nicht mit dem Schlüssel versorgen kann.
hab ich mit dem Benutzer „root“ gemacht, aber der Skript will jetzt noch richtig:
<?
$ip ="192.168.10.22:22";
$user = 'root';
set_include_path('/var/lib/symcon/scripts');
require_once('/var/lib/symcon/scripts/Net/SSH2.php');
require_once('/var/lib/symcon/scripts/Crypt/RSA.php');
$key = new Crypt_RSA();
$key->loadKey(file_get_contents('/volume1/public/id_rsa'));
$ssh = new Net_SSH2($ip);
if (!$ssh->login($user, $key)) {
exit('Login Failed');
}
echo @$ssh->exec('shutdown -h now');
?>
Ergebnis:
Warning: file_get_contents(/volume1/public/id_rsa): failed to open stream: Datei oder Verzeichnis nicht gefunden in /var/lib/symcon/scripts/33965.ips.php on line 11
Login Failed
die Datei ist aber unter volume1:
Denke mal ist bestimmt irgendwo nur ein Flüchtigkeitsfehler.
Läuft bei Dir IPS auf der Synology ?
Ich habe das Key-File vom Public-Ordner der Synology auf den IPS-Rechner (Tinkerboard) ins Verzeichnis „/var/lib/symcon/scripts/libs/keys“ verschoben.
Aus SIcherheitsgründen würde ich den Key auch nicht im Public-Ordner der Synology lassen.
<?php
$ip ="192.168.178.51:22";
$user = 'root';
set_include_path(__DIR__ . '/libs');
require_once(__DIR__.'/libs/Net/SSH2.php');
require_once(__DIR__.'/libs/Crypt/RSA.php');
$key = new Crypt_RSA();
$key->loadKey(file_get_contents('/var/lib/symcon/scripts/libs/keys/DS218_id_rsa'));
$ssh = new Net_SSH2($ip);
if (!$ssh->login($user, $key)) {
exit('Login Failed');
}
echo @$ssh->exec('shutdown -h now');
echo "Shutdown command sent to ".$ip;
?>
.
Habe auch noch einmal meinen Key gecheckt:
Entgegen meiner bisherigen Aussage muss der Key auch nicht mit PuTTYgen konvertiert werden. Das ist nur bei Verwendung des Keys mit Putty bzw. WinSCP notwendig.
ich habe gerade ein Update auf die 6.23 gemacht und dabei getestet, ob der Shutdown per Skript aus Win heraus noch funktioniert.
Dies geht problemlos und da oekomat sich per root anmeldet braucht er auch nicht den Key File. Dieses Skript funktioniert bei mir.
// IP vom NAS
$ssh = new Net_SSH2($DeviceIP);
if(! $ssh->login($NAS_Root_utf8, $NAS_PW_User_utf8))
{
exit('Login Failed');
}
// Pause zur Sicherheit falls Platten im Ruhezustand
sleep(15);
// Sofortiger Shutdown da das Skript ansonsten offensichtlich auf die Beendigung des Shutdowns wartet.
// Möglicherweise ist dies erst seit der phpseclib1.0.18 die am 16.1.2020 installiert habe.
$ssh->exec("shutdown -h now");
2 Dinge waren mir dabei aufgefallen. Zum einen müssen die Platten ggfs. erst wieder hochgefahren sein und zum anderen muss die richtige phpseclib installiert sein.
sorry, folgendes hatte ich noch vergessen. Ab V 6 der Synology muss man das Login mit root auf der DS freischalten. Ich habe leider den Link nicht mehr zur Verfügung. Aber Google hilft, wenn man „root login synology“ eingibt
Sollte ich den ursprünglichen Link den ich damals benutzt habe finden werde ich ihn noch posten.