Fernwartung: SSH / VPN

  • Sehr geehrtes Forum,


    in meiner Verzweiflung wende ich mich nun vertrauensvoll an euch, in der Hoffnung, dass ihr mir helfen könnt.


    Folgendes habe ich vor: Ich möchte einen Raspberry Pi 3 irgendwo in der Pampa abstellen, damit dieser dort diverse Messwerte aufnimmt. An den Pi habe ich ein LTE-Stick angeschlossen. Diese Werte sollen in eine Cloud geschrieben werden (funktioniert einwandfrei). Des Weiteren möchte ich den Pi aber auch aus der Ferne per SSH warten können.

    In meinem LAN konnte ich erfolgreich per SSH und SFTP eine Verbindung herstellen, das ist ja auch nicht weiter schwer :)


    Nun möchte ich aber von meinem LAN aus über das Internet auf den Pi per SSH zugreifen können , um cronjobs und ähnliches zu setzen. Bei diesem "Fernzugriff" bin ich aber nun am verzweifeln.

    Ich kenne mich leider mit der ganzen Problematik nicht so gut aus. Ich vermute, dass ich auf dem Pi openVPN installieren muss, für meinen Router eine dynDNS und eine Portweiterleitung einrichten muss und dass ich diverse Zertifikate erstellen muss, aber wie gesagt, ich bin mir da nicht sicher und kenne mich auch nahezu garnicht damit aus.


    Könnt Ihr mir bitte eine Anleitung dazu geben, was ich alles tun muss? Ist mein Vorhaben überhaupt realisierbar? Oder gibt es vielleicht sogar einen einfacheren Weg?

  • Netzwerk per LTE bedeutet meist CGN, d.h. kein Zugriff von aussen.

    Eine Alternative:

    Du baust vom RPi aus einen reverse SSH-Tunnel auf, über den du von aussen dann Zugang erlangst. Das dann noch per autossh und schon braucht man sich um nichts mehr kümmern.

    Fragen sind genau dann dumm, wenn sie mit dem Manual, Google, DuckDuckGo oder gar

    (dieses ist die schlimmste Alternative!)

    von der FAQ beantwortet werden! [strcat.de]

  • Vielen Dank für die schnelle Antwort!

    Das hört sich ja sehr gut an. Also brauche ich so keinen VPN-Tunnel zu erstellen?

    Könntest du mich trotzdem bitte ein bisschen anleiten, wie ich das realisiere? Wie stelle ich nun die Verbindung über reverse SSH und auto SSH her? Welche Pakete und Befehle brauche ich.

    Ich werde mich jetzt auch direkt intensiv damit beschäftigen.

    Nochmals: Vielen Dank!

  • Du benötigst nur die Pakete autossh, openssh-server, openssh-client und einen Host, der aus dem Internet dauerhaft erreichbar ist (zu dem baust du den Tunnel auf).

    Die grundlegende Einrichtung ist z.B. hier beschrieben:

    https://www.rustimation.eu/ind…nnel-schritt-fur-schritt/

    Fragen sind genau dann dumm, wenn sie mit dem Manual, Google, DuckDuckGo oder gar

    (dieses ist die schlimmste Alternative!)

    von der FAQ beantwortet werden! [strcat.de]

  • :)sehr gut. Auf der Seite bin ich auch gerade. Ich arbeite mich da jetzt durch und gebe dann Feedback, ob es funktioniert hat. Danke!

  • So, ich habe die Anleitung befolgt, jedoch klappt es noch nicht:


    Letztendlich gebe ich ja folgenden Befehl ein:

    ssh -p2000 -fNC -R 10011:localhost:22 pi@dyn.IP.adresse


    Natürlich nicht genauso, sondern mit meinen Daten. Meine Fragen hierzu:

    - sind "localhost" und "pi" dasselbe? Meine "gateway-pi" ist ja mein laptop, welcher im LAN ist. Hier nehme ich doch meinen PC-Namen oder meine IP, oder? Also gebe ich an beiden Positionen das gleiche ein? Ich weiß ja, dass ich dort auch das LAN-Gateway angeben könnte, also der Fritzbox , um verschiedene Teilnehmer ansprechen zu können

    - müssen die dyn.IP.Adresse und die IP meines PC's einer gemeinsamen Netzmaske entsprechen, also müssen die ersten 3 Zahlen gleich sein? Sorry , aber was den Netzwerkkram angeht, kenn ich mich garnicht aus.


    Diese Fehlermeldung erscheint, wenn ich den oben genannten Befehl in meinen raspberry pi eingebe. Kann man aus der Rückmeldung schon erkennen , was funktioniert und was nicht?


    ssh: connect to host xxx.xxx.xxx.xxx port 22: Connection refused

  • Wenn du einen Host innerhalb deines LANs als Ziel für den Tunnel nimmst, musst du Portforwarding auf diesen Host:port im Router konfiguriert haben, ansonsten ist der vom Internet aus nicht erreichbar.


    "pi" in "pi@dyn.IP.adresse" ist der Benutzer, der sich anmeldet.

    "dyn.ip.adresse" ist deine externe IP-Adresse (WAN) bzw ein DynDNS-Name, der auf diese zeigt.

    "connection refused" heisst, dass die Service auf der angegebenen Adresse nicht angesprochen werden kann. Wahrscheinlich weil du den falschen Ziel-Host benutzt, bzw. kein Portforwarding eingerichtet hast.

    Beispiel:

    LAN mit Fritzbox.

    - Fritzbox hat extern IP 10.20.30.40 (nur Beispiel).

    - Dein Notebook im LAN hat die IP 192.168.178.111

    - In der Fritzbox ist Portforwarding extern:2000 -> 192.168.178.111:22 tcp eingerichtet (extern Port 2000/tcp wird an 192.168.178.111 Port 22/tcp weitergeleitet.

    - Dann auf dem rpi mit LTE-Verbindung: ssh -p2000 -fNC -R 10011:localhost:22 pi@10.20.30.40

    Fragen sind genau dann dumm, wenn sie mit dem Manual, Google, DuckDuckGo oder gar

    (dieses ist die schlimmste Alternative!)

    von der FAQ beantwortet werden! [strcat.de]

  • Du benötigst nur die Pakete autossh, openssh-server, openssh-client und einen Host, der aus dem Internet dauerhaft erreichbar ist (zu dem baust du den Tunnel auf).

    Die grundlegende Einrichtung ist z.B. hier beschrieben:

    https://www.rustimation.eu/ind…nnel-schritt-fur-schritt/

    Entschuldige, wenn ich hier so frech quereinsteige.... aber ich habe mir das gerade mal durchgelesen und ich fand das furchtbar kompliziert.Mich würde an dem Modell stören, dass er immer einen Tunnel aufrecht erhalten muss und nicht nur einen etabliert, wenn es erwünscht ist und dass auch noch zusätzlich ein DynDNS eingeschaltet ist. Aber vielleicht habe ich das auf die Schnelle auch nur falsch verstanden. *hmmm*


    Der entfernte PI hat ja eine Internetverbindung, könnte man ihm nicht einfach eine SMS senden, oder eine Telegram-Message, oder auch ne Mail, deren Mailadresse er alle 5 Minuten abruft? In der Nachricht ist meine IP enthalten, mit der er sich verbinden soll, via OpenVPN mit meinem Router oder mit meinem Netz, oder einem bliebigen PC.... und der Tunnel wird nur dann etabliert, wenn ich es brauche.... in dem ich ihn über verfügbare Kanäle dazu aufgefordert habe. smstools und telegram-cli haben imho beide einen Eventhandler, mit dem man auf Nachrichten reagieren kann und z.B. andere Programm oder ein Bashscript starten kann. Man braucht auch kein Gateway oder sonst was dazu, sondern einfach nur einen laufenden Dienst mit OpenVPN als Server, der auf einer beliebigen Maschine läuft und der über die angegebene IP erreichbar ist. Wäre das nicht viel einfacher umzusetzen?

  • ThomasL Deshalb schrieb ich in #2 "Eine Alternative", es gibt wahrscheinlich dutzende Wege.

    Ich bevorzuge für sowas autossh/reverse-tunnel, weil ich ohnehin für diesen Zweck Hosts im Internet laufen habe. Und solange ich keinen Zugriff auf das Netzwerk hinter einem remote-Host brauche, reicht mir der ssh-Tunnel.

    ymmv

    Fragen sind genau dann dumm, wenn sie mit dem Manual, Google, DuckDuckGo oder gar

    (dieses ist die schlimmste Alternative!)

    von der FAQ beantwortet werden! [strcat.de]

  • Ja, das wird mit SSH genauso gut gehen... ich selber nutze nur bevorzugt OpenVPN und kenne noch nicht alle Möglichkeiten mit SSH. Mir gings jetzt eher darum, wie man den PI auffordert, überhaupt eine Verbindung aufzubauen, und zwar nur dann, wenn man es will. Und das geht doch eigentlich total easy mit smstools oder dem telegram-cli. Man fordert ihn einfach über sowieso vorhandene Kanäle dazu auf. War auch nur so 'ne Idee......:conf:

  • Das benötigt zusätzlichen Code (Pakete, Dienste), die ich nicht will/brauche. Aber wie gesagt, der Lösungen gibt es viele.

    Fragen sind genau dann dumm, wenn sie mit dem Manual, Google, DuckDuckGo oder gar

    (dieses ist die schlimmste Alternative!)

    von der FAQ beantwortet werden! [strcat.de]

  • Erstmal Danke für die vielen Reaktionen, aber ich krieg die Verbindung nicht aufgebaut. Ich habe aber wirklich die Portfreigabe auf der fritzbox eingerichtet. Und den Befehl habe ich mittlerweile auch in allen Variationen durchgeklingelt.

    Gibt es eine Möglichkeit zu testen, ob eine Verbindung überhaupt möglich wäre. Eine Art scan-Funktion woran ich auf meinem laptop im LAN sehen kann, ob etwas über den Port ankommen würde. Betriebssystem auf dem lappi ist ubuntu.

  • Ich hab es fast geschafft. peinlicher Fehler: habe auf meinem laptop vergessen openssh-server -und client zu installieren. ist erfolgt. Nun werde ich nach einem Passwort gefragt. Aber keines meiner Passwörter funktioniert. Ich muss nun noch einmal fragen:

    ssh -p2000 -fNC -R 10011:localhost:22 pi@dyn.IP.adresse

    Das was vor dem "@" steht,, ist das der Benutzername meines laptops oder der des Raspberry's. oder kann das sogar ganz willkürlich sein. komischerweise komm ich bei beidem bis zu Passworteingabe, aber keines funktioniert. Bitte gebt mir eine letzte Hilfestellung. Danke im Vorraus

  • So habe eben meinem Befehl noch ein -v hinzugefügt. Hier die Rückgabe:


    pi@raspberrypi:~ $ ssh -p2000 -v -fNC -R 10011:localhost:22 Sebastian@XXX.XXX.XXX.XXX

    OpenSSH_6.7p1 Raspbian-5+deb8u3, OpenSSL 1.0.1t 3 May 2016

    debug1: Reading configuration data /etc/ssh/ssh_config

    debug1: /etc/ssh/ssh_config line 19: Applying options for *

    debug1: Connecting to XXX.XXX.XXX.XXX [XXX.XXX.XXX.XXX] port 2000.

    debug1: Connection established.

    debug1: key_load_public: No such file or directory

    debug1: identity file /home/pi/.ssh/id_rsa type -1

    debug1: key_load_public: No such file or directory

    debug1: identity file /home/pi/.ssh/id_rsa-cert type -1

    debug1: key_load_public: No such file or directory

    debug1: identity file /home/pi/.ssh/id_dsa type -1

    debug1: key_load_public: No such file or directory

    debug1: identity file /home/pi/.ssh/id_dsa-cert type -1

    debug1: key_load_public: No such file or directory

    debug1: identity file /home/pi/.ssh/id_ecdsa type -1

    debug1: key_load_public: No such file or directory

    debug1: identity file /home/pi/.ssh/id_ecdsa-cert type -1

    debug1: key_load_public: No such file or directory

    debug1: identity file /home/pi/.ssh/id_ed25519 type -1

    debug1: key_load_public: No such file or directory

    debug1: identity file /home/pi/.ssh/id_ed25519-cert type -1

    debug1: Enabling compatibility mode for protocol 2.0

    debug1: Local version string SSH-2.0-OpenSSH_6.7p1 Raspbian-5+deb8u3

    debug1: Remote protocol version 2.0, remote software version OpenSSH_7.2p2 Ubuntu-4ubuntu2.2

    debug1: match: OpenSSH_7.2p2 Ubuntu-4ubuntu2.2 pat OpenSSH* compat 0x04000000

    debug1: SSH2_MSG_KEXINIT sent

    debug1: SSH2_MSG_KEXINIT received

    debug1: kex: server->client aes128-ctr umac-64-etm@openssh.com zlib@openssh.com

    debug1: kex: client->server aes128-ctr umac-64-etm@openssh.com zlib@openssh.com

    debug1: sending SSH2_MSG_KEX_ECDH_INIT

    debug1: expecting SSH2_MSG_KEX_ECDH_REPLY

    debug1: Server host key: ECDSA 34:63:9d:9c:59:71:2f:f8:e5:19:a0:08:22:5c:35:c2

    debug1: checking without port identifier

    debug1: Host 'XXX.XXX.XXX.XXX' is known and matches the ECDSA host key.

    debug1: Found key in /home/pi/.ssh/known_hosts:1

    debug1: found matching key w/out port

    debug1: SSH2_MSG_NEWKEYS sent

    debug1: expecting SSH2_MSG_NEWKEYS

    debug1: SSH2_MSG_NEWKEYS received

    debug1: SSH2_MSG_SERVICE_REQUEST sent

    debug1: SSH2_MSG_SERVICE_ACCEPT received

    debug1: Authentications that can continue: publickey,password,keyboard-interactive

    debug1: Next authentication method: publickey

    debug1: Trying private key: /home/pi/.ssh/id_rsa

    debug1: Trying private key: /home/pi/.ssh/id_dsa

    debug1: Trying private key: /home/pi/.ssh/id_ecdsa

    debug1: Trying private key: /home/pi/.ssh/id_ed25519

    debug1: Next authentication method: keyboard-interactive

    debug1: Authentications that can continue: publickey,password,keyboard-interactive

    debug1: Next authentication method: password

    Sebastian@XXX.XXX.XXX.XXX's password:

    debug1: Authentications that can continue: publickey,password,keyboard-interactive

    Permission denied, please try again.



    sebastian@sebastian-X75A1:~$ ls -l .ssh

    insgesamt 4

    -rw-r--r-- 1 sebastian sebastian 395 Dez 9 17:51 known_hosts



    Fehlen mir irgendwelche files? Ich mach nun erstmal Feierabend. :)

  • Das sieht doch schon einmal sehr gut aus! Langfristig solltest du natürlich auch noch Schritt 2 der Anleitung befolgen, also den Login mit SSH-Keys verwenden.


    Zu deiner Frage: Vor dem "@" in dem Befehl muss der Nutzername deines Gateway Pi stehen (also in deinem Fall der Nutzername "sebastian" deines Laptops). Was mir am Log direkt auffällt: Du schreibst "Sebastian" im Befehl oben mit Großbuchstaben am Anfang, dein Nutzername lautet aber "sebastian" und die Eingabe ist hier case-sensitive. Das solltest du zuerst ausprobieren. Falls das nichts bringen sollte, müsstest du uns mal deine /etc/ssh/sshd_config zeigen. :-)

  • Aaaah , kleingeschrieben, ok danke :) Ich hab halt den groß geschriebenen Namen genommen, weil der auch so in der Anmelde-GUI da steht. Hatte gestern aber keine Lust mehr weitere Versuche zu starten. Leider werde ich in den nächsten 2 Wochen auch nicht mehr an diesem Projekt arbeiten können. Sobald sich neue Erkenntnisse ergeben oder Probleme auftauchen, teile ich das hier mit.


    Bis dahin habe ich noch einige theoretische Fragen:

    1. Wie kann ich das mit einem Windows-Rechner auf dem "Gateway-Pi" im LAN realisieren? Geht das überhaupt mit reverseSSH? Welche Tools kämen dafür in
    Frage? Putty o.ä.?

    2. Wie kann ich bei meinem Projekt, also Raspi mit LTE-Stick in der Pampa, eine SFTP-Datenübertragung realisieren?

    3. Nun möchte ich noch die Idee von ThomasL aufgreifen, also den Pi via SMS, Telegram-Message oder Mail ansprechen, sodass dieser eine Verbindung mit open VPN aufbaut. Gibt es dafür eine ählnliche Anleitung wie für reverseSSH? Ich bin da leider noch nicht fündig geeworden.


    Nochmals Danke an alle , die sich hier beteiligt haben, das hat mir alles schon sehr geholfen!

  • remot3 Install


    Install the weavedconnectd package

    First, get the latest repositories:


    sudo apt-get update


    Next, download the remot3.it weavedconnectd package:


    sudo apt-get install weavedconnectd



    sudo weavedinstaller


    sudo netstat -apn | grep tcp | grep LISTEN

  • Hallo zusammen,

    Hab diesen Thread erst soeben entdeckt. Freut mich, wenn mein Rustimation.eu Blog hier zitiert wird und sogar rege Diskussionen auslöst.

    Warum überhaupt einen Reverse SSH Tunnel aufbauen, wenn es doch (scheinbar) einfachere Lösungen gibt? Es kommt halt immer auf den Einsatzzweck an. Will ich meinen Pi im Mobilfunknetz z.B. als Webserver öffentlich sichtbar machen, komme ich kaum darum herum, einen Reverse Tunnel zu verwenden. Z.B. als IoT Host zum Heizung schalten oder für eine interaktive Webcam.

    Will man hingegen nur alle Jubeljahre mal auf den Remote Pi zugreifen, reicht sicher eine andere Möglichkeit wie oben beschrieben aus.

    sebman : du hättest deine Fragen auch gerne in meinem Blog stellen können. Normalerweise antworte ich sehr schnell. Ich hab mir das Thema selbst sehr mühsam erarbeitet und wollte meine Erkenntnisse auch anderen möglichst verständlich zugänglich machen. Deshalb mein Blog. Verständnisschwierigkeiten Anderer helfen mir dabei, diese Probleme aus dem Weg zu räumen und kontinuierlich besser zu werden.

    Gruß Chris aka Rustimator