ubuntuusers.de

Bash Prozessüberwachung ssh

Status: Gelöst | Ubuntu-Version: Server 11.10 (Oneiric Ocelot)
Antworten |

sc0p

Avatar von sc0p

Anmeldungsdatum:
10. Januar 2012

Beiträge: Zähle...

Wohnort: Schweiz

Hallo Zusammen

Ich glaube ich bin hier am richtigen Ort für meine Frage.

Ich arbeite momentan auf einem textbasierten minimalUbuntu um skirpts für unsere geschäftlichen Solarisserver zu entwickeln.

Nun stehe ich vor einer kniffligen Aufgabe: (sehe ich zumindest so)

Ausgangslage:

-a1 Clients verbinden sich per ssh auf einen Routingserver

-a2 Dieser routet diese automatisch weiter

-a3 Der user verbringt seine Zeit auf dem 2 Server

-a4 Sobald der user die Verbindung beim 2 Server beendet, soll er auch aus dem 1ten (Routingserver) gekickt werden.

Probleme:

-p1 Autostart mit jeweiligen Benutzer

-p2 Wie soll ich ganz allgemein eine Art Prozessüberwachung kreieren?

-p3 Wie gewährleiste ich das der User sich nicht auf dem Routingserver aufhält? (resp. darauf rumwüted)

...

Lösungsansätze (Ich teste momentan mit ssh localhost)

zu p1: das einizge userspezifische skript, welches gestarted wird, dass ich kenne ist das .bashrc. Ist dies schlau?

Löscht jmd das .bashrc, somit befindet sich der user einfach auf dem routingserver und weiss garnicht warum?

zu p2: Dies zerbricht mir noch am meisten den Kopf; Ich stelle mir etwas in dieser richtung vor:

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
#!/bin/bash

# task = PID des ssh tasks
task=`ps -ef | grep ssh | grep "user" | grep -v grep | awk '{print $2}'` # mehrere grep da kein egrep vorhanden

while [ !z $task ]
do

# -> ja was mach ich jetzt?
# -> während das while statement true ist, ist alles gut

done

exit # kick den User vom Routingserver

Wer wirklich bis hierhin gelesen hat: Verstehst du was ich meine?

Vielen Dank schon mal

Gruss, sc0p

Kinch

Anmeldungsdatum:
6. Oktober 2007

Beiträge: 1261

Ich muss offen zugeben, dass ich deine Problemstellung und deine Zielsetzung nicht ganz nachvollziehen kann. Aber ich vermute, du suchst sowas wie SSH-Forwarding: http://wiki.ubuntuusers.de/ssh#SSH-Tunnel

Noch ein paar allgemeine Anmerkungen:

zu p1: das einizge userspezifische skript, welches gestarted wird, dass ich kenne ist das .bashrc. Ist dies schlau?

Nein. Einstellungen, die zwingend für alle Nutzer gelten soll, sollten auf keinen Fall in userspezifische Skripte. Dafür gibt es systemweite Einstellungen. In dem Fall etwa die /etc/profile bzw. /etc/profile.d.

zu p2: Dies zerbricht mir noch am meisten den Kopf; Ich stelle mir etwas in dieser richtung vor:

Mir ist ehrlich gesagt, nicht so ganz klar, was das Skript genau tun soll. Um zu testen, ob eine Verbindung über SSH zustande kommt, kannst du $SSH_CONNECTION oder $SSH_CLIENT auslesen.

sc0p

(Themenstarter)
Avatar von sc0p

Anmeldungsdatum:
10. Januar 2012

Beiträge: Zähle...

Wohnort: Schweiz

die zwingend für alle Nutzer gelten soll

nun eben nicht

Sondern nur für ein paar spezielle

Darum muss ich auf ein userspezifisches startskript zugreifen.

Dieses startskript startet dann einen überwachten forward per SSH.

Bemerkt die Überwachung dass der Spezifizierte user die Verbindung zum Zielhost beendet, soll dieser auch vom routingserver gekickt werden.

Nur spezifische user weil: Die versierten Benutzer connecten ebenfalls auf diesen Server, haben aber die Möglichkeit auch auf andere System weiter zu verbinden. Dies hab ich wohl vergessen zu erläutern.

Allerdings die für mich neue Variante (Danke an dich, Kinch)

1
2
ssh -L [bind_address:]port:host:port user@server
ssh -R [bind_address:]port:host:port user@server 

...könnte man doch in ein Skript packen, und per .bashrc starten.

Anschliessend SSH_CLIENT resp. $SSH_CONNECTION auslesen?

mickydoutza

Avatar von mickydoutza

Anmeldungsdatum:
31. Dezember 2010

Beiträge: 2185

sc0p schrieb:

Ausgangslage:

-a1 Clients verbinden sich per ssh auf einen Routingserver

-a2 Dieser routet diese automatisch weiter

-a3 Der user verbringt seine Zeit auf dem 2 Server

-a4 Sobald der user die Verbindung beim 2 Server beendet, soll er auch aus dem 1ten (Routingserver) gekickt werden.

Warum sollen sich die Clients (spezifische user) nicht per ssh, direkt (über den Routingserver) auf den 2. Server verbinden? Z. B. mit:

ssh -t user_1@routingserver ssh user_1@2ter_server

sc0p

(Themenstarter)
Avatar von sc0p

Anmeldungsdatum:
10. Januar 2012

Beiträge: 34

Wohnort: Schweiz

Warum sollen sich die Clients nicht per ssh, direkt auf den 2. Server verbinden?

Weil sie dann mit dem ersten exit auf dem routingserver bleiben.

mickydoutza

Avatar von mickydoutza

Anmeldungsdatum:
31. Dezember 2010

Beiträge: 2185

sc0p schrieb:

Warum sollen sich die Clients nicht per ssh, direkt auf den 2. Server verbinden?

Weil sie dann mit dem ersten exit auf dem routingserver bleiben.

Aber dieses Problem hast Du mit deiner jetzigen Vorgehensweise, aber auch.

sc0p

(Themenstarter)
Avatar von sc0p

Anmeldungsdatum:
10. Januar 2012

Beiträge: 34

Wohnort: Schweiz

Ich hab momentan gar keine Vorgehensweise...

nur einen Ansatz;

startet dann einen überwachten forward per SSH.

Meine Idee wäre das ein Daemon laufen zu lassen der auf dem routingserver läuft. Dieser wartet darauf, dass die weitergeleitete Verbindung beendet wird, und kickt dann den User.

stfischr Team-Icon

Avatar von stfischr

Anmeldungsdatum:
1. März 2007

Beiträge: 19197

Peace.

sc0p schrieb:

-p1 Autostart mit jeweiligen Benutzer

einfach in die bashrc ganz am Ende

ssh userX@server2 && exit

hab ich jetzt net probiert, sollte aber klappen.

-p2 Wie soll ich ganz allgemein eine Art Prozessüberwachung kreieren?

Es gibt doch top, ps, etc ... wozu selber was programmieren?

-p3 Wie gewährleiste ich das der User sich nicht auf dem Routingserver aufhält? (resp. darauf rumwüted)

Rechte entsprechend setzen.

sc0p

(Themenstarter)
Avatar von sc0p

Anmeldungsdatum:
10. Januar 2012

Beiträge: 34

Wohnort: Schweiz

Klingt gut, ich geb morgen mal Feedback

Kinch

Anmeldungsdatum:
6. Oktober 2007

Beiträge: 1261

Also, wenn man verhindern will, dass der User auf dem Route-Server landet, sollte es eher

ssh userX@server2
exit

heißen. Daneben muss noch bedacht werden, dass durch die beiden SSH-Verbindungen auch das Passwort zweimal eingeben werden muss. Also sollte auch Schlüssel pro User dort hinterlegt werden.

sc0p

(Themenstarter)
Avatar von sc0p

Anmeldungsdatum:
10. Januar 2012

Beiträge: 34

Wohnort: Schweiz

Ok, ja; RSA Keys sind vorhanden

rklm Team-Icon

Projektleitung

Anmeldungsdatum:
16. Oktober 2011

Beiträge: 13205

stfischr schrieb:

sc0p schrieb:

-p1 Autostart mit jeweiligen Benutzer

einfach in die bashrc ganz am Ende

Ich würde eher ~/.bash_profile, ~/.bash_login oder ~/.profile nehmen. Beide Ansätze funktionieren aber nur, wenn der entsprechende Benutzer immer auf den anderen Server weitergeleitet werden soll.

ssh userX@server2 && exit

Und dann würde ich auch folgendes nehmen und einen Prozess sparen:

exec ssh userX@server2

Ciao

robert

Vain

Avatar von Vain

Anmeldungsdatum:
12. April 2008

Beiträge: 2510

rklm schrieb:

Und dann würde ich auch folgendes nehmen und einen Prozess sparen:

Das spart nicht nur einen Prozess, sondern verhindert auch den „Ausbruch“ in eine lokale Shell über „~.“ (mal in „man ssh“ nach „escape char“ suchen). ☺

rklm Team-Icon

Projektleitung

Anmeldungsdatum:
16. Oktober 2011

Beiträge: 13205

Vain schrieb:

rklm schrieb:

Und dann würde ich auch folgendes nehmen und einen Prozess sparen:

Das spart nicht nur einen Prozess, sondern verhindert auch den „Ausbruch“ in eine lokale Shell über „~.“ (mal in „man ssh“ nach „escape char“ suchen). ☺

Meinst Du über <esc><ctrl-z>? Naja, man kann ja auch noch "-e none" nutzen - dann hat es sich ausescaped. 😉

Wieder was gelernt. Danke!

Ciao

robert

sc0p

(Themenstarter)
Avatar von sc0p

Anmeldungsdatum:
10. Januar 2012

Beiträge: 34

Wohnort: Schweiz

Morgen zusammen

Wär hätte gedacht das dies mit einem Einzeiler geht...

Vielen Dank, hat funktioniert

http://imageshack.us/photo/my-images/21/sshforward.png/

Gruss, sc0p

Antworten |