ubuntuusers.de

prüfe ob pc mit Server verbunden ist

Status: Gelöst | Ubuntu-Version: Ubuntu 18.04 (Bionic Beaver)
Antworten |

Tron0070

Avatar von Tron0070

Anmeldungsdatum:
22. März 2010

Beiträge: 195

Wohnort: Chemnitz

Hallo Leute,

mein PC soll sich automatisch mit meinem Server via SSH verbinden, wenn auf dem Server, die Datei "switch" eine "1" enhält.

schalter=$(curl -s 'https://example.de/schalter/switch')

Wenn die Datei "switch" eine "0" enthält soll der PC sich nicht verbinden und nach 5 Sekunden nochmal schauen und so lange wiederholen bis in der Datei "switch" eine "1" drin steht und dann den Befehl:

ssh -R 2222:localhost:22 tron@<IP-Adresse>

ausführen.

Damit der SSH-Befehl nicht mehrmals ausgeführt wird, prüfe ich mit:

w |grep -iv "grep" | grep "<IP-Adresse"

prüfen ob der PC schon mit dem Server verbunden ist. Nur wird dort manchmal ein Pfad angegeben statt der IP.

USER     TTY      FROM             LOGIN@   IDLE   JCPU   PCPU WHAT
tron   tty1     -                16:39   10.00s  0.97s  0.00s /bin/bash /home/tron/bin/server

EDIT: Ich war noch nicht ganz fertig mit schreiben und habe versehentlich auf "Veröffentlichen" geklickt statt auf "Vorschau".

Hat jemand eine Idee woran das liegt oder kennt jemand eine Besseren Weg mein vorhaben zu realisieren?

Gruß Tron

seahawk1986

Anmeldungsdatum:
27. Oktober 2006

Beiträge: 11260

Wohnort: München

Hallo,

mir ist gerade nicht ganz klar, warum du mit w und grep auf eine Verbindung schauen willst - ein Skript, das in einer Endlosschleife alle 5 Sekunden auf dem Server nachsieht und nichts macht, solange eine Verbindung besteht ist ja schnell geschrieben:

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

server="tron@<IP-Adresse>"
local_port=2222
remote_port=22

while true
do
    if curl -s 'https://example.de/schalter/switch' | grep -q "1"
    then
        ssh -NR "${local_port}:localhost:${remote_port}" "$server"
    fi
    sleep 5
done

Das kann man dann von einer Systemd Service-Unit starten lassen und damit ist sicher gestellt, dass es nicht mehr als eine Instanz gibt.

Tron0070

(Themenstarter)
Avatar von Tron0070

Anmeldungsdatum:
22. März 2010

Beiträge: 195

Wohnort: Chemnitz

Hallo seahawk1986, dank für Deine Hilfe.

Ich wollte verhindern, dass nicht eine zweite Verbindung aufgebaut wird falls schon eine aufgebaut wurde. Aber das ist wahrscheinlich nicht nötig.

Vielen Dank nochmal.

Gruß Tron

seahawk1986

Anmeldungsdatum:
27. Oktober 2006

Beiträge: 11260

Wohnort: München

Um zu wissen, ob es schon einen SSH-Prozess gibt, der mit dem Server verbunden ist, könnte man sich z.B. die Ausgabe von ps ansehen:

[[ "$(ps h -fC ssh)" =~ 2222:localhost:22\ tron@<IP-Adresse> ]] && echo "Prozess für Reverse SSH Verbindung gefunden" 

Tron0070

(Themenstarter)
Avatar von Tron0070

Anmeldungsdatum:
22. März 2010

Beiträge: 195

Wohnort: Chemnitz

Vielen Dank seahawk1986,

jetzt weiß ich auch wieder wofür ich das brauchte. Für den Fall, dass die Verbindung aus irgendeinem Grund nicht aufgebaut werden konnte und der Verbindungsaufbau erneut versucht wird.

Antworten |