Synology per Script runter fahren?

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

bei mir sieht die Konstellation so aus:

Synology
IPS auf einem Raspberry - die ssh2.php liegt auf meinem Raspberry. Mein Skript für die Qnap greift da auch drauf zu.
Qnap

Die Qnap kann ich mit Skript problemlos herunterfahren. Bei der Syno beiß ich mir noch die Zähne aus. Jetzt mal ich ersmal das DMS Update. Dann versuche ich mal weiter.

Moin,

wie geschrieben muss das Login mit Root auf der DS freigeschaltet werden. Sonst geht es nicht.

Gruß
Hans

Das Key-File muss von IPS erreichbar sein. Deshalb das Key-File auf den Raspberry verschieben und den Pfad zum File im Skript eintragen.

Auf der QNAP hat der User „admin“ im Gegensatz zur Synology die vollen root-Rechte.

Damit hats geklappt. Also root Passwort anpassen und dann mit dem Skript brauche ich auch kein Putty oder Windows:

*<? 

include('/var/lib/symcon/scripts/Net/SSH2.php');//*ggf.*den*Pfad*anpassen



$ssh = NEW Net_ssh2('192.168.10.22');

//Anmeldeuser*und*Passwort*für*Freenas*nach*UFT8*konvertieren 
//nur*mit*UTF8*Einstellung*klappt*auch*ein*putty*login 
//ohne*diese*Konvertierung*erscheint*immer*"Login*Failed"*auch*hier*per*ssh->login
$username=UTF8_encode('root');


$password=UTF8_encode('PWD von Root');

IF(!$ssh->login ($username,$password))//*Hier*der*echte*Login
{
********exit('Login*Failed');
}
//SSH*Login:*Ende
$resultgpu=$ssh->exec("sudo poweroff"); 

?> 

Ich hatte diese Methode unter DSM 5.X im Einsatz. Mit Einführung von DSM 6 (beta ?) machte Synology diese Hintertür dicht.
Deshalb habe ich auf die Key-Methode gewechselt. Aber anscheinend funktioniert es wieder.

Moin,

@Najuka genau so ist es meiner Meinung nach :wink: Der Trick ist nun der, dass man zunächst den „alten“ Zustand wieder herstellen muss.

@oekomat Schön, dass es funktioniert :cool:

Gruß
Hans

Ein SSH-Client wird nur einmalig zur Erstellung des Key-Files benötigt. Es muss nicht zwingend putty unter Windows sein. Die Ausführung läuft genauso mit Skript in IPS wie bei der Passwort-Methode.
Apropos „kein putty oder Windows“: Wie hast Du das root-Passwort der Synology geändert ?

Guck mal nach den links aus der Anleitung von Oldie. Der eine beschreibt es. Klappt. Nur der schließen Befehl im Editor vi ist ein anderer. Hab ich mir aber nicht mehr gemerkt.

Moin,

statt vi vielleicht besser nano als Editor benutzen :wink:

Gruß
Hans

In der Anleitung steht putty, deshalb die Frage.
Bei beiden Methoden wird einmalig ein SSH-Client für die Einrichtung benötigt. Qed.

Achso meinst du…mit der Windows Console. Cmd …