Marvell Expect / Spawn auf DS209 installieren

DS110j, DS210j, DS410j, DS109, DS209, DS409, RS409
Status
Für weitere Antworten geschlossen.

alochter

Benutzer
Mitglied seit
08. Nov 2009
Beiträge
61
Punkte für Reaktionen
1
Punkte
8
Hallo zusammen,

ich möchte gerne von meiner DS209 auf einen anderen Linux-Rechner per Telnet zugreifen und dann ein Remote Kommando senden (reboot). Dazu habe ich gelesen, dass ich auf der DS209 dann den Spawn-Befehl nutzen muss. Voraussetzung ist dann aber, dass Expect installiert ist. Kann mir jemand verraten, wie ich Expect auf der DS209 installieren kann, um dann folgendes Script zu verwenden?:

#!/usr/bin/expect
spawn /usr/bin/telnet
expect "telnet>" { send "open IpDerLinux-Kiste\n" }
expect "login:" { send "root\n" }
expect "Password:" { send "yourpassword\n" }
expect "DiskStation>" { send "reboot\n" }
exit

Vielen Dank im voraus.

Gruss,
alochter
 

itari

Benutzer
Mitglied seit
15. Mai 2008
Beiträge
21.900
Punkte für Reaktionen
14
Punkte
0
Der 'expect' liegt nur in einer Phyton-Variante vor; den telnet muss man sich per ipkg nachinstallieren.

Rich (BBCode):
Synology> ipkg list | grep expect
py24-pexpect - 2.4-1 - Python module for automating interactive applications.
py25-pexpect - 2.4-1 - Python module for automating interactive applications.
Synology> ipkg install inetutils

Wenn man die inetutils installiert, wird auch der rlogin bzw. der rsh mit installiert. Ich könnte mir vorstellen, dass man damit dein Problem auch lösen könnte.

Itari
 

alochter

Benutzer
Mitglied seit
08. Nov 2009
Beiträge
61
Punkte für Reaktionen
1
Punkte
8
Der 'expect' liegt nur in einer Phyton-Variante vor; den telnet muss man sich per ipkg nachinstallieren.

Rich (BBCode):
Synology> ipkg list | grep expect
py24-pexpect - 2.4-1 - Python module for automating interactive applications.
py25-pexpect - 2.4-1 - Python module for automating interactive applications.
Synology> ipkg install inetutils

Wenn man die inetutils installiert, wird auch der rlogin bzw. der rsh mit installiert. Ich könnte mir vorstellen, dass man damit dein Problem auch lösen könnte.

Itari

Hi,
vielen Dank für die rasche Antwort. Inetutils hatte ich mir genau auf diese Art und Weise bereits installiert und auch über die beiden Phyton Punkte bin ich bereits gestolpert. RLogin und Rsh wird mir leider nicht weiterhelfen, da es keinen entspr. Server auf meinem Linux Rechner (ist nämlich ein Sat-Receiver Coolstream HD1, der leider keine Crontab für den geplanten Reboot hat) gibt. Hast Du evtl. noch einen Tip, wie ein Phyton-Script als Problemlösung aussehen könnte?

Gruss,
alochter
 

alochter

Benutzer
Mitglied seit
08. Nov 2009
Beiträge
61
Punkte für Reaktionen
1
Punkte
8
[gelöst]

Hallo zusammen,

für alle, die ein ähnliches Problem haben:

----------------------------------
#!/opt/bin/python2.4

import pexpect
child = pexpect.spawn (telnet Zieladresse')
child.sendline ('/sbin/reboot')
child.expect ('$') #prompt
child.sendline ('exit')
child.close()
----------------------------------


Gruss,
alochter
 

jahlives

Benutzer
Mitglied seit
19. Aug 2008
Beiträge
18.275
Punkte für Reaktionen
4
Punkte
0
Hallo zusammen,

für alle, die ein ähnliches Problem haben:

----------------------------------
#!/opt/bin/python2.4

import pexpect
child = pexpect.spawn (telnet Zieladresse')
child.sendline ('/sbin/reboot')
child.expect ('$') #prompt
child.sendline ('exit')
child.close()
----------------------------------


Gruss,
alochter
Mit diesem Code gibt es sicher einen Laufzeitfehler. In der Zeile mit child= fehlt ein Anführungszeichen ;)
Btw Bist du sicher dass du die Verbindung noch schliessen kannst? Eigentlich kill ein reboot auch jede telnet Verbindung, von dem her wundert es mich, dass du noch ein exit an die entfernte Kiste schicken kannst
 

alochter

Benutzer
Mitglied seit
08. Nov 2009
Beiträge
61
Punkte für Reaktionen
1
Punkte
8
Mit diesem Code gibt es sicher einen Laufzeitfehler. In der Zeile mit child= fehlt ein Anführungszeichen ;)
Btw Bist du sicher dass du die Verbindung noch schliessen kannst? Eigentlich kill ein reboot auf jede telnet Verbindung, von dem her wundert es mich, dass du noch ein exit an die entfernte Kiste schicken kannst

Nein, es gibt sicher keinen Laufzeitfehler. Auf meiner DS209 läuft es genau so.
Den Exit kann man sich natürlich nach dem Reboot schenken. Reboot sollte nur ein Beispiel sein. Ich für meinen Teil mounte an dieser Stelle ein paar LWs erneut.

Gruss,
alochter
 

sab8051a

Benutzer
Mitglied seit
09. Feb 2010
Beiträge
8
Punkte für Reaktionen
0
Punkte
0
Hallo zusammen,

ich versuche gerade mit hilfe von Expect einen rsync zu basteln der mir einige Daten auf meine Internet-Disk synct. Habe dazu das Python-Modul installiert und das scriptbeispiel von "alochter" wie folgt geändert:

#!/opt/bin/python2.4

import pexpect
child = pexpect.spawn (rsync -avhPe ssh /volume1/homes/admin/ username@rsync.hidrive.strato.com:/users/username/test/")
child.expect ('username@rsync.hidrive.strato.com's password:') #prompt
child.sendline ('password')
child.close()

Leider bekomme ich folgende Fehlermeldung:

script: script: 3: import: not found
script: script: 4: Syntax error: "(" unexpected

Warum findet er den import nicht?

Gruss Sab8051a
 

alochter

Benutzer
Mitglied seit
08. Nov 2009
Beiträge
61
Punkte für Reaktionen
1
Punkte
8
Hallo zusammen,

ich versuche gerade mit hilfe von Expect einen rsync zu basteln der mir einige Daten auf meine Internet-Disk synct. Habe dazu das Python-Modul installiert und das scriptbeispiel von "alochter" wie folgt geändert:

#!/opt/bin/python2.4

import pexpect
child = pexpect.spawn (rsync -avhPe ssh /volume1/homes/admin/ username@rsync.hidrive.strato.com:/users/username/test/")
child.expect ('username@rsync.hidrive.strato.com's password:') #prompt
child.sendline ('password')
child.close()

Leider bekomme ich folgende Fehlermeldung:

script: script: 3: import: not found
script: script: 4: Syntax error: "(" unexpected

Warum findet er den import nicht?

Gruss Sab8051a

Hallo,
ist zwar schon lange her, dass ich das eingerichtet habe, aber zunächst fällt mir das " auf. Ich bin mir nicht mehr sicher, aber wenn überhaupt in Hochkomma, dann auf jeden fall vorne und hinten.

So in etwar:
child = pexpect.spawn ("rsync -avhPe ssh /volume1/homes/admin/ username@rsync.hidrive.strato.com:/users/username/test/")

Probier es aber auch mal ganz ohne Hochkommata.

Gruss,
alochter
 

sab8051a

Benutzer
Mitglied seit
09. Feb 2010
Beiträge
8
Punkte für Reaktionen
0
Punkte
0
Da habe ich auch schon alle varianten probiert. Er scheitert ja aber schon in Zeile 3 beim Import... Warum?
 

alochter

Benutzer
Mitglied seit
08. Nov 2009
Beiträge
61
Punkte für Reaktionen
1
Punkte
8
Da habe ich auch schon alle varianten probiert. Er scheitert ja aber schon in Zeile 3 beim Import... Warum?

Hi,
ich kann Dir nur anbieten, heute Abend nochmal in mein Script zu schauen, aber ich denke, dass da auf jeden Fall ein Problem mit den Hochkommata vorliegt, denn entweder keine, oder beide:D

Gruss,
alochter
 

jahlives

Benutzer
Mitglied seit
19. Aug 2008
Beiträge
18.275
Punkte für Reaktionen
4
Punkte
0
Was auch noch eine Möglichkeit wäre, ist es auf beiden Kisten ssh zu aktivieren und einen Login mit Zertifikat zu erstellen.
Dann kannst du mittels
Code:
ssh -i /path/to/key root@IP_DER_ANDEREN_DS command
ein beliebiges Kommando auf der entfernten DS ausführen
 

sab8051a

Benutzer
Mitglied seit
09. Feb 2010
Beiträge
8
Punkte für Reaktionen
0
Punkte
0
Hi,
ich kann Dir nur anbieten, heute Abend nochmal in mein Script zu schauen, aber ich denke, dass da auf jeden Fall ein Problem mit den Hochkommata vorliegt, denn entweder keine, oder beide:D

Gruss,
alochter

Da geb ich Dir schon recht... aber das ändert nix an dem Error in Zeile 3 beim Import... :(
 

sab8051a

Benutzer
Mitglied seit
09. Feb 2010
Beiträge
8
Punkte für Reaktionen
0
Punkte
0
Was auch noch eine Möglichkeit wäre, ist es auf beiden Kisten ssh zu aktivieren und einen Login mit Zertifikat zu erstellen.
Dann kannst du mittels
Code:
ssh -i /path/to/key root@IP_DER_ANDEREN_DS command
ein beliebiges Kommando auf der entfernten DS ausführen

hallo Jahlives,

die Idee hatte ich auch schon, nur leider unterstützt die "Internet-Platte" keine Autentifizierung per SSH-Key, nur die Verschlüsselung per SSH, ich muß aber immer noch den usernamen (siehe Befehlszeile) angeben und werde dann nach dem Passwort gefragt. Genau das wollte ich eben per expect übergeben.
Thats the problem..

Gruss sab8051a
 

jahlives

Benutzer
Mitglied seit
19. Aug 2008
Beiträge
18.275
Punkte für Reaktionen
4
Punkte
0
hallo Jahlives,

die Idee hatte ich auch schon, nur leider unterstützt die "Internet-Platte" keine Autentifizierung per SSH-Key, nur die Verschlüsselung per SSH, ich muß aber immer noch den usernamen (siehe Befehlszeile) angeben und werde dann nach dem Passwort gefragt. Genau das wollte ich eben per expect übergeben.
Thats the problem..

Gruss sab8051a
Sorry, dann war meine Idee ziemlich sinnlos. Ich werde mir die Pakete auch mal installieren und heute Abend etwas "pröbeln"
Irgendwie kriegen wir das schon hin ;)
 

jahlives

Benutzer
Mitglied seit
19. Aug 2008
Beiträge
18.275
Punkte für Reaktionen
4
Punkte
0
Habe das python Paket auch mal installiert. Funzt bei mir wie gewünscht...
Hast du denn auch python selber installiert? Ist das Script ausführbar? Stimmt der Pfad zum Python Interpreter (erste Zeile)? Ist bei mir python2.5
Wie rufst du das Script auf?
 

sab8051a

Benutzer
Mitglied seit
09. Feb 2010
Beiträge
8
Punkte für Reaktionen
0
Punkte
0
Ich denke ich habe das script nur falsch aufgerufen. Ich habe es immer mit "sh script" probiert. Mit "./script" kommt keine Fehlermeldung, allerdings passiert auch nix... Wenn ich mit "./script" starte kommt der Promt nach ca. 2 Sek. wieder zurück ohne weitere kommentare. Auch wurde der RSYNC nicht durchgeführt. Kann man irgendwo nachschauen, was des expect da so treibt?
So schaut es bei mir aus wenn ich das script ausführe:

---------------------
DiskStation> ./script
DiskStation>
------------------------

Das wars.... schade eigentlich, aber zumindest hab ich keine Fehlermeldung mehr...
 

alochter

Benutzer
Mitglied seit
08. Nov 2009
Beiträge
61
Punkte für Reaktionen
1
Punkte
8
Hallo zusammen,

ich versuche gerade mit hilfe von Expect einen rsync zu basteln der mir einige Daten auf meine Internet-Disk synct. Habe dazu das Python-Modul installiert und das scriptbeispiel von "alochter" wie folgt geändert:

#!/opt/bin/python2.4

import pexpect
child = pexpect.spawn (rsync -avhPe ssh /volume1/homes/admin/ username@rsync.hidrive.strato.com:/users/username/test/")
child.expect ('username@rsync.hidrive.strato.com's password:') #prompt
child.sendline ('password')
child.close()

Leider bekomme ich folgende Fehlermeldung:

script: script: 3: import: not found
script: script: 4: Syntax error: "(" unexpected

Warum findet er den import nicht?

Gruss Sab8051a

So, habe mal eben nachgeschaut. Das ist mein Code. Ob es hilft kann ich nicht sagen. Schau Dir mal die 'an:

-------------------------------------------

#!/volume1/opt/bin/python2.4

import pexpect
child = pexpect.spawn ('/volume1/opt/bin/telnet 192.168.1.200')
#child.sendline ('ls -la > /tmp/test.txt')
#child.sendline ('/sbin/reboot')
child.sendline ('mount -t nfs 192.168.1.250:/volume1/video/ /mnt/movies/ -o rw,intr,rsize=8192,soft,udp,nolock')
child.sendline ('mount -t nfs 192.168.1.250:/volume1/music/ /mnt/music/ -o rw,intr,rsize=8192,soft,udp,nolock')
child.expect ('$')
child.sendline ('exit')
child.close()
-----------------------------------------
Gruss,
alochter
 

sab8051a

Benutzer
Mitglied seit
09. Feb 2010
Beiträge
8
Punkte für Reaktionen
0
Punkte
0
Also bei mir schaut es im moment so aus:

-------------------------------------------------------
#!/opt/bin/python2.5

import pexpect
child = pexpect.spawn ('rsync -avhPe ssh --exclude=@eaDir /volume1/homes/ username@rsync.hidrive.strato.com:/users/username/test/')
child.expect ("username@rsync.hidrive.strato.com's password:") #prompt
child.sendline ('password')
--------------------------------------------------------------------

Ich habe in der Zeile "child.expect" bewußt nicht ' genutzt sondern " da ja im zu erwartenden Text schon ein ' auftaucht.
Wenn ich dieses script so starte passiert garnix. Ich bekomme weder eine Fehlermeldung, noch wird der rsync ausgeführt...
Hat da jemand ne Idee?:confused:
 

alochter

Benutzer
Mitglied seit
08. Nov 2009
Beiträge
61
Punkte für Reaktionen
1
Punkte
8
Also bei mir schaut es im moment so aus:

-------------------------------------------------------
#!/opt/bin/python2.5

import pexpect
child = pexpect.spawn ('rsync -avhPe ssh --exclude=@eaDir /volume1/homes/ username@rsync.hidrive.strato.com:/users/username/test/')
child.expect ("username@rsync.hidrive.strato.com's password:") #prompt
child.sendline ('password')
--------------------------------------------------------------------

Ich habe in der Zeile "child.expect" bewußt nicht ' genutzt sondern " da ja im zu erwartenden Text schon ein ' auftaucht.
Wenn ich dieses script so starte passiert garnix. Ich bekomme weder eine Fehlermeldung, noch wird der rsync ausgeführt...
Hat da jemand ne Idee?:confused:

Hi,

ich rate jetzt mal. Hast Du schon mal das probiert?
child.expect ('"username@rsync.hidrive.strato.com's password:"')

oder das?

child.expect ('username@rsync.hidrive.strato.com\'s password:')

Meiner Meinung nach musst Du dafür sorgen, dass das ' in com's als wirkliches Zeichen erkannt wird.

Bist Du sicher, dass genau dieses als Prompt ausgegeben wird? Hatte auch lange gekämpft, bis ich wirklich genau den Prompt hatte. Bei mir war es damals nach dem Login wirklich nur das "$". In der Schell sah es aus als hätte ich "$ ". Das war der Grund, warum es bei mir auch erst nicht ging.

Gruss,
alochter
 

sab8051a

Benutzer
Mitglied seit
09. Feb 2010
Beiträge
8
Punkte für Reaktionen
0
Punkte
0
Also wenn ich das so mach:

child.expect ('"username@rsync.hidrive.strato.com's password:"')

dann bekomme ich nen Syntax error:

DiskStation> ./script
File "./script", line 5
child.expect ('"username@rsync.hidrive.strato.com's password:"') #prompt
^
SyntaxError: invalid syntax

mit dem \ hatte ich auch schon probiert, gibt zwar keinen Error, aber es passiert trotzdem nix, ist also das gleiche wie wenn ich nur die " verwende...

Ich habe jetzt auch mal das mit dem Leerzeichen probiert, ändert leider nix. Ich habe diese Zeichenfolge mit Copy & Paste kopiert...

Gruss sab8051a
 
Status
Für weitere Antworten geschlossen.
 

Kaffeautomat

Wenn du das Forum hilfreich findest oder uns unterstützen möchtest, dann gib uns doch einfach einen Kaffee aus.

Als Dankeschön schalten wir deinen Account werbefrei.

:coffee:

Hier gehts zum Kaffeeautomat 

 
 
  AdBlocker gefunden!

Du bist nicht hier, um Support für Adblocker zu erhalten. Dein Adblocker funktioniert bereits ;-)

Klar machen Adblocker einen guten Job, aber sie blockieren auch nützliche Funktionen.

Das Forum wird mit hohem technischen, zeitlichen und finanziellen Aufwand kostenfrei zur Verfügung gestellt. Wir zeigen keine offensive Werbung und bemühen uns um eine dezente Integration.

Bitte unterstütze dieses Forum, in dem du deinen Adblocker für diese Seite deaktivierst.

Du kannst uns auch über unseren Kaffeautomat einen Kaffe ausgeben oder ein PUR Abo abschließen und das Forum so werbefrei nutzen.

Vielen Dank für Deine Unterstützung!