Script + ssh + screen

Vom einfachen Programm zum fertigen Debian-Paket, Fragen rund um Programmiersprachen, Scripting und Lizenzierung.
Antworten
Marduk
Beiträge: 2
Registriert: 01.11.2006 21:31:05

Script + ssh + screen

Beitrag von Marduk » 01.11.2006 21:36:07

Kann mir jemand helfen oder einen guten Link geben? Das Problem ist etwas verzwickt. Es geht darum dass ich ein Shell Script schreiben möchte das folgendes tut: Es connectet zu einem server per ssh und öffnet da ein bereits existierenden screen (screen -r name). Da drin soll es dann wiederum einen Befehl ausführen, allerdings läuft in dem screen ein programm bereits, das auf bestimmte commands hört (wie top). Am schluss möchte ich dann natürlich den screen wieder detachen (wie macht man "ctrl-a d" in einem Script???) So sieht es mal aus:

Code: Alles auswählen

#Zum server verbinden
ssh user@server << EOT
#Screen öffnen
screen -r myscreen
#und jetzt?
EOT
Danke mal im Vorraus für eure Hilfe.

nil
Beiträge: 989
Registriert: 08.06.2005 13:28:36

Beitrag von nil » 02.11.2006 10:28:22

Hi,

ich gehe davon aus, dass das schwer bis gar nicht möglich ist. Den ersten Schritt kannst du noch recht leicht machen. Beim Starten der Shell wird z.B. .bashrc ausgeführt. Ich nutze es, um immer in der gleichen Screen-Sitzung zu landen. Optional wird sie neu erzeugt. Die Abfrage ist notwendig, da beim Neuerzeugen der Sitzung .bashrc erneut durchlaufen wird. "exit 0" wird benötigt, wenn man bei einem Detach gleich aus der SSH-Sitzung rausfliegen möchte.
Nutzen wollte ich es für ein 4-Augen-Prinzip. Das Problem ist nur, dass mit CTRL-C und CTRL-Z die Ausführung des Scriptes zuvor gestoppt werden kann.
Wenn du nun denkst, dass du am Ende des Scriptes was ausführen kannst liegst du falsch, da bei einer existierenden Sitzung das Script nur einmal durchlaufen wird. In diesem Fall müsstest du in der Zeile /usr/bin/... einen entsprechenden Parameter z.B. -X für Screen übergeben.

Code: Alles auswählen

~/.bashrc

if  [ -z $STY ]; then
  /usr/bin/screen -xRR;
  exit 0;
fi
Gerade festgestellt, geht viel einfacher: http://www.debianforum.de/forum/viewtopic.php?t=36164
Zuletzt geändert von nil am 02.11.2006 11:04:01, insgesamt 2-mal geändert.

Benutzeravatar
bse
Beiträge: 468
Registriert: 19.03.2006 19:58:00
Lizenz eigener Beiträge: MIT Lizenz

Beitrag von bse » 02.11.2006 10:29:27

Code: Alles auswählen

screen -X exec top
screen -X register q q
screen -X paste q
"man screen" hilft ;)

EDIT: Achja, detached geht natürlich mit "screen -d"

Marduk
Beiträge: 2
Registriert: 01.11.2006 21:31:05

Beitrag von Marduk » 02.11.2006 16:41:06

-X habe ich gesucht aber ehrlich gesagt beim überfliegen des man nicht gefunden :)
Den Befehl register kenn ich gar nicht und ist auch nicht auf meiner Maschine installiert.

screen -d ist ja schön und gut, aber das funktioniert nur, wenn kein programm im screen läuft.

Ich konnte das ganze jetzt mit AppleScript lösen (eine Sprache wie keine :D )

Code: Alles auswählen

tell application "Terminal"
	activate
	do script "ssh user@server.net"
	delay 2
	do script "screen -r myscreen" in window frontmost
	delay 2
	do script "do something in cui app" in window frontmost
	delay 2
end tell

tell application "System Events"
	keystroke "a" using control down
	keystroke "d"
end tell
Da ich die scripte mit ssh eh nur auf Mac OS X brauche ist das Problem mal gelöst. Allerdings brauche ich trotzdem noch ein shellscript welches an den screen myscreen ein "Befehl" schickt. Ich weiss mit -X, aber das geht nicht wenn dort ein Programm AM LAUFEN ist welches auf bestimmte eingaben wartet. Immerhin können wir das detachen mal vergessen, da es reicht den bestimmten befehl einzugeben.
Zum Beispiel wenn man

screen -S test
[im screen "top"; dann detach]
screen -r test -X q

ausführt, sollte dann ja mit -X q (es wird auch kein Fehler zurückgeliefert) das top beendet werden. Wenn ich dann aber den screen wieder öffne läuft das top munter und fröhlich weiter. also wie schicke ich das q richtig an das top??? Ist für das nun das register???

Antworten