Synology per Script runter fahren?

Hallo Marcel.

Habe etwas ähnliches gefunden. Geht leider auch nicht. Wieder kommen im Debug keine Rückmeldungen. Habe aber etwas von einer php-Klasse gelesen. Muss ich mal probieren. Ich vermute ein Problem mit SSH oder eine fehlende Extension in meinem IPS. Denn wenn es bei vielen geht … Irgenwie wird es doch gehen.

PS: Vielleicht kann man ja auch einen Windows-PC so hoch- und runterfahren. :rolleyes:

Das geht schon alles , überprüfe erstmal ob der Port für ssh bei dir eventuell nen anderer ist , genau wie bei der Register variablen . Es gibt einige Fall stricke aber es geht zu 199% :slight_smile:

Gesendet von meinem iPhone mit Tapatalk

Das geht schon alles , überprüfe erstmal ob der Port für ssh bei dir eventuell nen anderer ist , genau wie bei der Register variablen .

Wie - Registervariable anlegen?

Port 23 ist standardmäßig Telnet und nicht ssh. Bist du dir sicher, dass du über ssh gehst?

Telnet gibt es wohl nicht bei Nas4free. Wenn ich per cmd ein

telnet nas4free 22

mache, bekomme ich eine Antwort:

SSH-2.0-OpenSSH_6.4p1-hpn14v2 FreeBSD-openssh-portable-6.4.p1,1

Allerdings ohne jeglichen weiteren Prompt. Diesen Text sehe ich auch im Debug-Fenster des Client-Sockets. Somit verhält sich das IPS wie die Telnet-Verbindung via cmd. Beim Tippen von irgendetwas und anschließendem Drücken der Enter-Taste kommt das:

SSH-2.0-OpenSSH_6.4p1-hpn14v2 FreeBSD-openssh-portable-6.4.p1,1

Protocol mismatch.


Verbindung zu Host verloren.

Nehme ich auf dem gleichen Rechner (putty), spricht das NAS mit mir ("login as: ") und führt nach Eingabe von Name / Passwort den Befehl

shutdown -p now

korrekt aus.

Hallo aus Magdeburg ,

du bringst da auch echt was durcheinander , also Telnet ist port 23 , und SSH 22 .

Wenn deine Box Telnet kann , dann passt mein Script auch … Aber per Telnet SSH aufrufen wie du es versuchst wird nie klappen.

Aber per Telnet SSH aufrufen wie du es versuchst wird nie klappen.

Das ist schon klar. Ich wollte damit nur schauen, dass sich auf Port 22 etwas tut und ob das NAS antwortet.
Hast Du eine Registervariable dafür erstelt? Weil du es erwähntest. Muss man im IPS SSL oder ähnliches installieren oder so? Ein IPS-Updatebringt aber auch nichts. Das Senden an Port 22 scheint zu gehen, aber es kommt keine Antwort auf meine „Sendung“. Wie gesagt, über putty geht alles. Also ist der Fehler wohl nicht im NAS.

Habe also einen ClientSocket mit IP und Port 22 angelegt und diese ID in dein Script übernommen. Das WOL habe ich mal rausgenommen - extra Script.

 <?

$user = "root"; // User für den Login, eventuell "root"
$pw = "nas4free"; // Adminpasswort der Qnap
$id = 50177 /*[Client Socket - Nas4free]*/;   //Client Socket auf port 23


CSCK_SendText($id,$user.chr(13));
IPS_Sleep(500);
CSCK_SendText($id,$pw.chr(13));
IPS_Sleep(500);
CSCK_SendText($id, "shutdown -p now".chr(13));

?>

Moin Andreas,
ich bin bissel verwirrt? Welchen Port nimmst denn jetzt?
Im Text schreibst was von PORT 22 und in deinem Skript steht bei ClientSockt " Port auf 23 "!?

Also…. ich benutze das Skript (das Original ) für mein Synology und ich hatte Probleme, das ich alles zu schnell
abgefragt habe. Das NAS kam nicht zum Antworten. Also habe ich die IPS_Sleep hoch gesetzt. Erst dann bekam ich eine Antwort bzw. mein Skript machte das was es sollte!
Hier mein Skript:


<?
@CSCK_SendText($id, 'root'.chr(13));
IPS_Sleep(1500);
@CSCK_SendText($id, 'passwordxxx'.chr(13));
IPS_Sleep(1500);
@CSCK_SendText($id, 'poweroff'.chr(13));
?>

Gruß,
Peter

Du wirst niemals Klartext an einen SSH-Port senden können!
Immerhin soll SSH ja sicher sein und ist somit verschlüsselt.
Darum wird dieses Script hier für Telnet niemals bei SSH gehen.
Bemühe bitte die Suche im Forum, gibt hier div. Umsetzungen um SSH-Verbindungen zu verwenden.
Z.B.http://www.ip-symcon.de/forum/showthread.php?t=20482
Michael

@Marcel: danke für deine Mühe gestern.

Es ging nur um die Sache mit SSH und Telnet, welches ich mir vielleicht noch aus sportlichem Ärgeiz auf den Nas4free installieren.

Wie ich hier schon schrieb, habe ich mit einem php-Konstrukt Erfolge. Das geht gut und zuverlässig.

Übrigens: u.a. wurde ich hier fündig: http://www.ip-symcon.de/forum/threads/6657-SSH-möglich?p=195087#post195087

[ol]
[li]Klasse downloaden[/li][li]Entpacken in C:\ip-symcon\scripts\phpseclib[/li][li]Script erstellen (und Daten anpassen)[/li][li]bei mir stellte sich sofort nach ersten Starten Freude über den Erfolg ein:)[/li][/ol]

<?
// Quelle:
// http://www.ip-symcon.de/forum/threads/6657-SSH-m%C3%B6glich?p=195087#post195087
// http://phpseclib.sourceforge.net/

$ip = '192.168.178.30';
$user = 'user';
$pass = 'pass';
$befehl = 'shutdown -p now';


set_include_path(get_include_path() . PATH_SEPARATOR . 'phpseclib');

include('Net/SFTP.php');

$ssh = new Net_SSH2($ip);
if (!$ssh->login($user, $pass)) {
    exit('Login Failed');
}

echo $ssh->exec($befehl);

?>

Hallo,
das Thema ist zwar schon etwas länger her, aber vielleicht kann mir jemand helfen.
Ich bin gerade neu bei IP Symcon (Symbox) und versuche nun meine DS1813+ per Script zu starten und zu beenden.
Ich habe hier einige Infos gefunden und ausprobiert (Danke).
Der Teil für das Beenden funktioniert.
Allerdings habe ich ein paar Probleme mit dem Starten. Lasse ich das NAS herunterfahren und warte nur kurz, dann funktioniert auch der Teil für das Starten. Ist die Zeitspanne im ausgeschalteten Zustand länger, dann wacht das NAS leider nicht auf. Jedoch kann ich dann per Fritzbox die DS starten. Es wäre echt genial wenn ich auch das Aufwachen/ Starten per IPS hinbekommen könnte.
Vielleicht kann mir jemand helfen, DANKE

Hier der wesentliche Teil für das Aufwachen / Starten (Quelle: dieses Forum)


$ip = "";
$port = 9;
$mac = "xxxxxxxxx";

$nic = fsockopen("udp://" . $ip, $port);
  if($nic)
  {
    $packet = "";
    for($i = 0; $i < 6; $i++)
       $packet .= chr(0xFF);
    for($j = 0; $j < 16; $j++)
    {
      for($k = 0; $k < 6; $k++)
      {
        $str = substr($mac, $k * 2, 2);
        $dec = hexdec($str);
        $packet .= chr($dec);
      }
    }
    $ret = fwrite($nic, $packet);
    fclose($nic);
}

Moin!

Schau dir mal das „Fritzbox Project“ von Nall chan an. Damit kannst du das WOL der FritzBox verwenden :wink:

Alternativ einfach selbst ein WOL-Skript in IPS einbauen. Glaube ich hatte da auch mal was geposted beim SonyTV oder irgendwo anders :slight_smile: Ansonsten gibt es auf GitHub PHP Vorlagen für WOL.

WOL muss natürlich beim NAS eingerichtet und aktiv sein :slight_smile: Dann klappt das egal nach welcher „Offline-Zeitspanne“.

Grüße,
Chris

Hallo,

vielen Dank für die Antwort.
Mit dem FB Projekt funktioniert es. Leider stürzt meine SymBox mit aktuellen Updates nach einiger Zeit ab, nachdem ich das FB Projekt installiert habe.
Schade das es nicht auch ohne die Funktion der Fritzbox geht.
WOL ist für alle Ports aktiviert, sonst würde es auch nicht mit der Funktion der Fritzbox funktionieren.

Ich fand es nur komisch, dass das zuvor gepostete Script funktioniert, wenn die DS nicht allzu lange aus ist.

Irgendwann wird IPS4 nicht mehr Beta sein und dann auch stabil laufen…so lange musst du dich dann wohl leider noch gedulden, wenn wirklich kein anderes WOL Skript funktioniert.
Aber Beta bleibt halt Beta :wink:

Grüße,
Chris

Moin…
… bei mir funzt das Skript nicht mehr zum runterfahren des NAS.
Hat jemand einen Tip oder schon einen Workarround?!

Grüße,
Peter

Seit Version 6 gelten für den Zugriff per Telnet strengere Sicherheitsregeln. Wie es geht steht hier (für poweroff ist root-Berechtigung nötig):
https://www.synology.com/de-de/knowledgebase/DSM/tutorial/General/How_to_login_to_DSM_with_root_permission_via_SSH_Telnet

LG kjb

Moin… Danke für den Link. Bekomme es nicht hin mit meinem Skript( Post #46). Wenn ich mich per Putty anmelde, funktioniert das so, aus IPS per PHP nicht.

Ich sehe nicht mal den Login im Log der Synology wenn ich es per IPS versuche.
Das war vorher auch anders.

o.k., das habe ich nicht getestet. Ich verwende einen Batch-File mit dem Telnet Scripting Tool. Dort funktioniert es so.

kjb

Magst du das posten/bereitstellen?
Ich möchte das NAS nur irgendwie per IPS wieder runterfahren können.
Ich habe mein NAS nur sporadisch an und beim verlassen der Wohnung immer runter gefahren.
Grüße,
Peter

Hallo Peter,

falls du damit etwas anfangen kannst, hier mein Script…allerdings war das eines meiner ersten damals…es ist super schlampig programmiert…Fachleute hier werden die Hände über dem Kopf zusammenschlagen…aber bei mir funktionierte es mit IPS 3.4 und nun auch mit 4.0 und Syno 6.x…

<?

// Konfigbereich :
  $mac = "0011320C5BCB"; //MAC Adresse der Syno
   $ip = "255.255.255.255"; // Broadcast adresse
 $user = "HIER USERNAME"; // User für den Login, eventuell "root"
   $pw = "HIER PASSWORT"; // Passwort der Syno
   $id = 59678 /*[Synology Socket]*/;   //Client Socket auf port 23
$power = GetValueInteger(40816 /*[Unsere Wohnung\APC USV 550\Back-UPS RS 550G\Watt]*/);


// Ab hier nichts mehr ändern
################################################################################

function wake($ip, $mac, $port)
{
  $nic = fsockopen("udp://" . $ip, $port);
  if($nic)
  {
    $packet = "";
    for($i = 0; $i < 6; $i++)
       $packet .= chr(0xFF);
    for($j = 0; $j < 16; $j++)
    {
      for($k = 0; $k < 6; $k++)
      {
        $str = substr($mac, $k * 2, 2);
        $dec = hexdec($str);
        $packet .= chr($dec);
      }
    }
    $ret = fwrite($nic, $packet);
    fclose($nic);
    if($ret)
      return true;
  }
  return false;
}


if($IPS_SENDER == "Execute"){
    echo "Dieses Script kann nicht von Hand gestartet werden.";
    //return;
}elseif ($IPS_SENDER == "WebFront"){
    SetValue(42236 /*[Unsere Wohnung\Multimedia\Hauptmenü\Links\Synology Server\Power]*/, $IPS_VALUE);

	    if ($IPS_VALUE == true)
		 { // Wake On Lan
		  wake($ip,$mac,23); //Port kann irgendwas sein
	    }
	    elseif($IPS_VALUE == false)
		 { // Shutdown
       IPS_SetVariableProfileAssociation("WOL", 1, "WOL", "", 0x005000);
      //WFC_SendNotification(39346 /*[Standard]*/, 'Shutdown Synology nicht möglich !', 'Mach halt was....', 'Information', 10);


      @CSCK_SendText($id, "root".chr(13));
      IPS_Sleep(1500);
      @CSCK_SendText($id, "rootpasswort einsetzen".chr(13));
      IPS_Sleep(1500);
      @CSCK_SendText($id, "poweroff".chr(13));
	   }


}elseif($_IPS['SENDER'] == 'Variable'){
	if(GetValueBoolean(42236 /*[Unsere Wohnung\Multimedia\Hauptmenü\Links\Synology Server\Power]*/) == true){
		IPS_SetScriptTimer($IPS_SELF, 150);
	}
	else{}

}
elseif($_IPS['SENDER'] == "TimerEvent"){
   IPS_SetProperty($id, "Open", true); //I/O Instanz soll aktiviert sein.
	IPS_Sleep(500);
	IPS_ApplyChanges($id); //Neue Konfiguration übernehmen

	IPS_SetScriptTimer($IPS_SELF, 0);
}else{
	echo "Dieses Skript kann nur vom WebFront aus gestartet werden!";
}


?>

LG
Sascha

Hier meine Version:

Telnet Scripting Tool http://support.moonpoint.com/downloads/windows/network/Telnet/tst10.php

Dann ein Batch-File, z.B. so:

C:\Synology-Shutdown\TelnetScripter.exe /r:C:\Synology-Shutdown\NAS.txt

Und der Script-File (NAS.txt):

Nas_Backup
WAIT "login:"
SEND "xxx\m"
WAIT "assword:"
SEND "yyy\m"
WAIT "$"
SEND "sudo -i\m"
WAIT "assword:"
SEND "zzz\m"
WAIT "#"
SEND "poweroff\m"
WAIT "#"

Dabei muss der erste User Administratorberechtigung haben und das zweite Passwort entspricht dem Passwort des Users ‚admin‘.
Die erste Zeile (hier Nas_Backup) ist der Hostname, kann aber auch die IP-Adresse sein.

LG, kjb

Hallo,

Kann die Synology ssh ? Ich denke doch schon, dann ist es sicherlich einfacher, das per ssh zu machen:

Putty auf dem IPS-Rechner installieren ( wenn Windows, Linux hat ssh eh onboad ), ssh-key ( mit PUTTYgen ) erstellen und auf der NAS unter dem root/admin - user einbinden.

Dann aus IPS raus mit „IPS_Execute“ einen Puttyaufruf startet nach folgendem Muster

NAS-shutdown.cmd

mit dem Inhalt:

"c:\Program Files (x86)\PuTTY\putty.exe" -ssh -l admin -i <PFAD-ZUM-KEYS\privat_key.ppk -m <PFAD-ZUM-KOMMANDOFILE
as_shutdown.txt <IP-der-NAS>

Inhalt der nas_shutdown.txt:

/etc/init.d/poweroff

(Beispiel für meine QNAP, entsprechender der eigenen NAS anpassen )

So fahre ich meine NAS von Windows aus runter, auch einem Backup-Programm und es hat auch aus IPS raus funktioniert.