• Willkommen im Linux Club - dem deutschsprachigen Supportforum für GNU/Linux. Registriere dich kostenlos, um alle Inhalte zu sehen und Fragen zu stellen.

Reverse SSH prüfen & aufrecht halten

d12turb3d

Newbie
Hallo zusammen,

ich bin absoluter Anfänger, was Linux angeht. Ich benötige Eure Hilfe bei folgender Ausgangssituation:

Ich möchte zwischen einem Raspbian Pi und einem gemieteten Rootserver einen Remote-SSH-Tunnel herstellen und dauerhaft aufrecht erhalten.


Folgendes habe ich bereits eingerichtet:
- OPENSSH-Client auf Raspberry installiert, Keys generiert
- OPENSSH-Server auf Rootserver installiert, Public Key auf Server kopiert
- sshd_config um die Zeile Gateway_Ports yes auf dem Server erweitert

Auf dem Raspberry starte ich den Tunnel mit:
ssh -R [PortServer]:[lokale IP]:[PortLokal] benutzer@Server

Das funktioniert soweit auch fehlerfrei.
Was ich aber gern möchte, ist, dass wenn der SSH-Tunnel (aus welchem Grund auch immer) geschlossen wird, er automatisch wieder aufgebaut wird.

Dazu habe ich auch folgendes Bash gefunden und genutzt:
Code:
!/bin/bash
createTunnel() {
  /usr/bin/ssh -N -R <PortServer>:<lokale IP>:<PortLokal> benutzer@server

  if [[ $? -eq 0 ]]; then
    echo Tunnel to jumpbox created successfully
  else
    echo An error occurred creating a tunnel to jumpbox. RC was $?
  fi
}

/bin/pidof ssh
if [[ $? -ne 0 ]]; then
  echo Creating new tunnel connection
  createTunnel
fi

Leider wird das Bash zwar ausgeführt, aber mit Fehlercode 1 beendet.
Hat jemand noch eine Idee für mich, woran es liegen könnte?
Ich hoffe, ich habe mich einigermaßen verständlich ausgedrückt.

Gruß
Sebastian
 
OP
D

d12turb3d

Newbie
Stimmt, danke für den Hinweis.

Ist mir irgendwann auch aufgefallen. In meinem Script, den ich genutzt habe steht es auch so drin!
 
Dann versuch doch mal den Ablauf per Hand zu machen, sprich Du führst in der Konsole die einzelnen Schritte aus. Also erstmal "/bin/pidof ssh" und direkt danach "echo $?" um zu sehen ob da Null raus kommt oder nicht. Nur wenn dort nicht Null kommt wird die Funktion createTunnel() überhaupt ausgeführt.
Nun kannst Du ja mal alle ssh-Instanzen killen und deinen ssh-Aufruf aus dem Skript ausführen. Mutmaßlich wirst Du eine Fehlermeldung zu sehen bekommen. Und damit dürfte dann ein "echo $?" etwas anderes als Null ausgeben. Dieses andere wird dir im Skript durch den echo-Befehl nach dem else angezeigt.

Das Du das Ganze per Konsole und eben nicht per ssh machen mußt, ist hoffentlich klar. Eine Frage hab ich aber jetzt schon: Wozu versetzt Du die ssh-Verbindung in den master-mode und wie ist dieser konfiguriert?
 
Oben