Synology per Script runter fahren?

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:


@CSCK_SendText($id, $user.chr(13));
IPS_Sleep(500);
@CSCK_SendText($id, $pw.chr(13));
IPS_Sleep(500);
@CSCK_SendText($id, "sudo -i".chr(13));
IPS_Sleep(1000);
@CSCK_SendText($id, $pw.chr(13));
IPS_Sleep(500);
@CSCK_SendText($id, "poweroff".chr(13));

Hat jemand eine Idee, warum das Script nicht funktioniert?
Vielen Dank

Hallo,
ich versuche meine DS216 per Telnet herunterzufahren. Bekomme im Debug Fenster kryptische Zeichen angegeben. Wenn ich die Befehle „manuell“ eingebe funktioniert alles.
debug.png

Anbei mein Skript:

  
CSCK_SendText($id, $u.chr(13));
IPS_Sleep(1000);
CSCK_SendText($id, $pw.chr(13));
IPS_Sleep(1000);
CSCK_SendText($id, "sudo su -".chr(13)); 
IPS_Sleep(1000);
CSCK_SendText($id, $pw.chr(13));
IPS_Sleep(1000);
CSCK_SendText($id, "shutdown -h now".chr(13)); 

Hat jemand dazu eine Idee?

VG

Bezugnehmend auf diesen Forumeintrag https://www.symcon.de/forum/threads/39055-QNAP-Reboot-Shutdown-per-IPS?p=375788#post375788 funktioniert das Herunterfahren der Diskstation mit SSH.

Der SSH root-Zugang über RSA-Key muss vorher in der Diskstation eingerichtet werden.

<?
$ip ="IP Diskstation:Port";
$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('Pfad zum exportierten Keyfile/id_rsa'));

$ssh = new Net_SSH2($ip);

if (!$ssh->login($user, $key)) {
    exit('Login Failed');
    }
    
echo @$ssh->exec('shutdown -h now');

?>

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.

Grüße,
Chris

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.

Putty.PNG

Putty_key.PNG

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).

Grüße,
Chris

Der Befehl „/sbin/shutdown“ erfordert im Linux-Standard root-Rechte. Deshalb gibt es aus meiner Sicht 2 Möglichkeiten:

  1. Login als root
  2. Erweiterung der Nutzerberechtigung in der Diskstation bzw. Änderung des SUID/SGID-Bits von „shutdown“.

Hallo Gemeinde,

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 :slight_smile:

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.

Vielen Dank und liebe Grüße
Sascha

IPS 5.0 Windows 10 64bit

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?

Shutdown bzw. Reboot funktioniert weiterhin mit dem Skript aus Post https://www.symcon.de/forum/threads/22237-Synology-per-Script-runter-fahren?p=376275#post376275.
Für den direkten root SSH Zugang muss ein Key auf der Synology generiert und mit puttykeygen konvertiert werden.
QNAP ist hier weniger restriktiv.
Die DiskStation starte ich mit Wake On LAN.

Hast du das am laufen und kannst mehr dazu sagen, Chris?

Einloggen als User (z.B. admin) mit Passwort geht. Für das shutdown Kommando braucht man aber root-Rechte.

Syno_admin.PNG

Syno_root.PNG

Syno_RSA.PNG

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…:frowning:

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.

Irgendwie komme ich da nicht so richtig weiter.

Folgende Befehle erzeugen den RSA-Key auf der DIskstation:

mkdir -p /root/.ssh
chmod 0700 /root/.ssh
ssh-keygen -b 4096 -t rsa -f /root/.ssh/id_rsa
cat /root/.ssh/id_rsa.pub >>/root/.ssh/authorized_keys
chmod 600 /root/.ssh/authorized_keys

Mit

cp /root/.ssh/id_rsa /volume1/public

wird der Key ins Public-Verzeichnis kopiert.

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:
syno.JPG

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.

Moin,

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.

Gruß
Hans

Direkter Root-Login funktioniert bei mir nur mit Key-File (DSM 6.2.3-25426 Update 2).

$ssh = new Net_SSH2($ip);

if (!$ssh->login($user, $passwort)) {
    exit('Login Failed');
    }
    
echo @$ssh->exec('shutdown -h now'); 
Login Failed

Moin,

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 :wink:

Sollte ich den ursprünglichen Link den ich damals benutzt habe finden werde ich ihn noch posten.

Gruß
Hans

Moin,

hieran habe ich mich damals orientiert :wink:

Synology DiskStation - Root-Passwort ändern - dennis-henss.de

Synology DiskStation mit einem Klick starten und herunterfahren - per SSH - dennis-henss.de

Gruß
Hans