Forum: PC-Programmierung Shellscript ssh wo läuft der Code?


von Udo Balinger (Gast)


Lesenswert?

Hallo
Ich habe ein Shellscript welchen ich nach ssh Login auf eiem remote 
Server aufrufe. Auf welcher Maschine läuft der Code dann?

Wenn ich das Terminal Fenster schließe stoppt die Ausführung. Wenn ich 
versuche
Daten aus xwininfo auszulesen zeigt er mir die Daten meines lokalen PC 
wenn ich aber lspci versuche bekomme ich die Daten des remote pc.

von hufnala (Gast)


Lesenswert?

Normalerweise auf der Maschine auf der Du Dich einloggst, die Ausführung 
ist aber (vielleicht von der Distri oder Shell abhängig) an die SSH 
Session gebunden. Such mal danach, du must die Ausführung vom SSH 
abkoppeln, bin mir aber nicht mehr sicher wie (im Hintergund ausführen 
mit &). Wenn Du ssh beendest bist Du wieder auf der eigentlichen 
Maschine.

//hufnala

von Michael D. (nospam2000)


Lesenswert?

Udo Balinger schrieb:
> Ich habe ein Shellscript welchen ich nach ssh Login auf eiem remote
> Server aufrufe. Auf welcher Maschine läuft der Code dann?

Auf dem remote server.

> Wenn ich das Terminal Fenster schließe stoppt die Ausführung.

Wenn die Verbindung getrennt wird, dann bekommt das Programm/Script ein 
Signal namens "HUP" = Hangup gesendet. Das kann man vermeiden mit Tools 
wie screen. Damit bleibt die shell session laufen und man sich später 
wieder verbinden mit 'screen -R'.

Man kann auch 'nohup' verwenden, wenn man das script nur 
weiterlaufenlassen will.

> Wenn ich versuche
> Daten aus xwininfo auszulesen zeigt er mir die Daten meines lokalen PC

Die lokale Environment Variable "DISPLAY" wird an den Remote Rechner 
weitergeleitet. Alles was X-Window angeht verwendet diese Variable, d.h. 
der remote Rechner kontaktiert deinen lokalen Rechner und holt die Daten 
von dort.

Für mal das folgende Kommando aus:

echo $DISPLAY

> wenn ich aber lspci versuche bekomme ich die Daten des remote pc.

Ja, normale Kommandos werden dort ausgeführt wohin du verbunden bist.

  Michael

: Bearbeitet durch User
von blub (Gast)


Lesenswert?

Ich meine es war NOHUP
No hangup - nicht aufhängen
Der Code läuft selbstverständlich auf dem angerufenen System, wie auch 
die shell selbst

von quotendepp (Gast)


Lesenswert?

Michael D. schrieb:
> Das kann man vermeiden mit Tools wie screen. Damit bleibt die shell
> session laufen und man sich später wieder verbinden mit 'screen -R'.

wenns geht tmux
tmux forever ;-)

von Sheeva P. (sheevaplug)


Lesenswert?

hufnala schrieb:
> Normalerweise auf der Maschine auf der Du Dich einloggst, die Ausführung
> ist aber (vielleicht von der Distri oder Shell abhängig) an die SSH
> Session gebunden. Such mal danach, du must die Ausführung vom SSH
> abkoppeln, bin mir aber nicht mehr sicher wie (im Hintergund ausführen
> mit &).

Und vom kontrollierenden Terminal abkoppeln mit nohup(1) -- oder in 
einem screen(1) oder Ähnlichem aufrufen...

Jedenfalls: die SSH-Connection öffnet auf dem Remotehost ein 
"controlling tty". Wenn die SSH-Session beendet wird -- egal wie -- wird 
das kontrollierende Terminal auch geschlossen, wodurch den darin 
laufenden Prozessen ein Signal (IIRC SIGHUP) zum Beenden gesendet wird. 
Im Sinne der Systemhygiene ist das auch sinnvoll und muß im Falle des 
Falles explizit etwa mit den vorgenannten Maßnahmen verhindert werden.

von Hannes J. (Firma: _⌨_) (pnuebergang)


Lesenswert?

Udo Balinger schrieb:
> Hallo
> Ich habe ein Shellscript welchen ich nach ssh Login auf eiem remote
> Server aufrufe. Auf welcher Maschine läuft der Code dann?

Auf beiden. Ein Teil (der ssh-Client lokal), ein anderer Teil (das auf 
dem entfernten Rechner ausgeführte Shellscript und der ssh-Server) 
remote.

> Wenn ich das Terminal Fenster schließe stoppt die Ausführung.

Das ist ein spezieller Mechanismus. Wenn du das lokale Terminal-Fenster 
schließt wird die Remote-Seite informiert (ordentliches Beenden) oder 
merkt es selber. Daraufhin wird auf dem Remote-Rechner der Remote-Login 
geschlossen. Beim Schließen eines Logins auf dem Remote-Rechner das 
Hangup-Signal an alle vom dem Login abhängigen Prozesse gesendet.

Das kann man mit noh(ang)up verhindern. 
https://de.wikipedia.org/wiki/Nohup

> Wenn ich
> versuche
> Daten aus xwininfo auszulesen zeigt er mir die Daten meines lokalen PC
> wenn ich aber lspci versuche bekomme ich die Daten des remote pc.

Das passt nicht zum Rest deiner Frage.

von foobar (Gast)


Lesenswert?

>> Wenn ich versuche
>> Daten aus xwininfo auszulesen zeigt er mir die Daten meines lokalen PC
>> wenn ich aber lspci versuche bekomme ich die Daten des remote pc.
>
> Das passt nicht zum Rest deiner Frage.

Passt schon.  Für jemanden, der das nicht kennt, ist es schon 
verwirrend, wenn er ein Programm auf dem Remote-Rechner startet, aber 
Daten von dem lokalen Rechner angezeigt bekommt.

Die Programme, die über ssh auf dem Remote-Rechner gestartet werden, 
laufen auch da.  Allerdings richtet es ssh standardmäßig so ein, dass 
Programme, die die grafische Oberfläche (X11) benutzen, die lokale 
Anzeige/Tastatur/Maus benutzen.  Wenn man also in der ssh-Sitzung z.B. 
firefox startet, läuft der auf dem Remote-Rechner, die Fenster 
erscheinen aber auf dem lokalen Rechner.

Wenn man das nicht möchte, kann man die Umgebungsvariable DISPLAY auf :0 
setzen (export DISPLAY=:0) und dann erscheinen die Fenster auch auf der 
Anzeige des Remote-Rechners (so dort eine aktive Anzeige vorhanden ist 
und Zugriffsrechte vorhanden sind, z.B. in Form einer bereits 
bestehenden Sitzung des gleichen Benutzers).

Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.