Fernzugriff auf Raspberry PI OS lite

Begonnen von tyrolean, 17 Januar 2021, 09:41:18

Vorheriges Thema - Nächstes Thema

tyrolean

Hallo,

ich würde gerne auf meinen (sowie ein paar weitere von Bekannten) Raspberry auf FHEM (also Port 8080) (optimaler Weise auch SSH) für Wartungsarbeiten zugreifen.
Auf den meisten Systemen ist aus Performance Gründen "nur" Raspberry OS lite installiert.
Da es sich nicht nur um mein System handelt möchte ich das Ganze ohne Änderungen am Router (also kein Port Forwarding oder DynDNS) und nach Möglichkeit ohne eigenem VPN realisieren. (ähnlich wie das über Teamviewer läuft, wenn ich das jedoch richtig sehe geht dies aber nur bei Systemen auf welchen Raspberry Desktop installiert ist?)

Ich bin mir sicher dass ich nicht der Einzige mit dieser Anforderung bin, habe aber keine befriedigende Lösung gefunden...

Vielen Dank für eure Antwort

amenomade

Teamviewer unterstützt auch headless Modus, oder?
Pi 3B, Alexa, CUL868+Selbstbau 1/2λ-Dipol-Antenne, USB Optolink / Vitotronic, Debmatic und HM / HmIP Komponenten, Rademacher Duofern Jalousien, Fritz!Dect Thermostaten, Proteus

tyrolean

Zitat von: amenomade am 17 Januar 2021, 10:55:20
Teamviewer unterstützt auch headless Modus, oder?
...soweit ich das verstehe nur zur Installation, greift aber dann auf den Desktop zu, oder hat das jemand anders in Verwendung

amenomade

ZitatTeamViewer 11 for Linux introduces headless support — the industry's first professional, easy remote access to headless Linux systems.

TeamViewer Headless Linux support takes you directly to the terminal – also known as command line, shell, console or VT (virtual terminal).
Hier: https://www.teamviewer.com/en/remote-access-headless-linux/
Pi 3B, Alexa, CUL868+Selbstbau 1/2λ-Dipol-Antenne, USB Optolink / Vitotronic, Debmatic und HM / HmIP Komponenten, Rademacher Duofern Jalousien, Fritz!Dect Thermostaten, Proteus

Wernieman

Brauchst Du für teamviewer nicht eine grafische Obefläche?

Ich persöhnlich würde doch "port-Forwarding" und ssh benutzen. Also "nur" ssh portforwarding. Über ssh kannst Du dann alles tunneln, d.h. auch auf dem fremden pi zugreifen. z.B. durch
ssh <fremder Server> L:localhsot:8080:localhost:8080
d.h. wenn Du nach eingabe des Befehles im Browser localhost:8080 eintippst, kommst Du auf dem fernen port 8080 raus.

Was Du jetzt nicht beantwortet hast:
Willst Du unbemerkt Zugreifen oder eben wie z.B. in TeamViewer, das der "andere" freischalten muß und Zugucken kannst?
- Bitte um Input für Output
- When there is a Shell, there is a Way
- Wann war Dein letztes Backup?

Wie man Fragen stellt: https://tty1.net/smart-questions_de.html

tyrolean

Ja de'facto möchte ich "unbemerkt" zugreifen. Das Problem ist dass die Raspies zum Teil in Umgebungen stehen wo ich kein Port Forwarding bei den Routern (Mangels Rechte) aktivieren kann...

Wernieman

Nur mal als "Idee" .. ssh kann auch "reverse Tunnel". D.h. Du lässt von den Pis ein ssh auf einen beliebigen (von Dir kontrollierten) Server im Netz los. Mußt nur dafür sorgen, das bei Abbruch (Watchdog) der ssh-Tunnel wieder aufgebaut wird. Anonsten gilt das gleiche, was ichh gesagt habe. Der parameter ist dann nicht L, aber das krieg man mit Hilfe der man Page schnell raus.

Weiß nur nicht, wie gut Deine Linux-Fähigkeiten sind ...
- Bitte um Input für Output
- When there is a Shell, there is a Way
- Wann war Dein letztes Backup?

Wie man Fragen stellt: https://tty1.net/smart-questions_de.html

tyrolean

Naja, meine Linux Fähigkeiten würde ich als mittelprächtig einstufen, aber daran sollte es nicht scheitern.
Woran es aber sicher scheitert ist ein von mir kontrollierter Server im Netz mit entsprechendem Service...

Wernieman

#8
Mit "Server" kann auch ein Pi in Deinem homenetz sein .. wenn er denn extern per ssh erreichbar ist ....

Und noch ein Stichwort:
autossh ... automatisiert das ganze

Praktisch ist in diesem Falle ssh eine Art VPN-Light

Edit:
Light im Sinne der Größe und Mächtigkeit, NICHT im Sinne von "Wenig Sicher"
ssh ist mitlerweile eines der bestens Geprüften Protokolle und eine Sicherheitslücke würde "Wellen" schlagen, da praktisch alle Unix-Server im Web mit ssh Administriert werden ....
- Bitte um Input für Output
- When there is a Shell, there is a Way
- Wann war Dein letztes Backup?

Wie man Fragen stellt: https://tty1.net/smart-questions_de.html

betateilchen

Zitat von: Wernieman am 18 Januar 2021, 08:45:04
Nur mal als "Idee" .. ssh kann auch "reverse Tunnel". D.h. Du lässt von den Pis ein ssh auf einen beliebigen (von Dir kontrollierten) Server im Netz los. Mußt nur dafür sorgen, das bei Abbruch (Watchdog) der ssh-Tunnel wieder aufgebaut wird.

Das ist die Variante, die ich für den Zugriff per ssh auf alle FHEM Installationen außerhalb meines eigenen Netzwerks zugreife.
Die einzelnen Strecken sind per Zertifikat gesichert, damit spare ich mir das Gehampel mit Usernamen und Passwörtern.

reversessh wird dabei als Dienst über systemd gestartet.



[Unit]
Description=Remote SSH Tunnel

ConditionPathExists=|/usr/bin
After=network.target

[Service]
User=<userName>
ExecStart=/usr/bin/ssh -p 9022 -NTC -o ServerAliveInterval=60 -o ExitOnForwardFailure=yes -o StrictHostKeyChecking=no -R 9093:localhost:9022 <userName>@<targetServer>

# Restart every >2 seconds to avoid StartLimitInterval failure
RestartSec=3
Restart=always

[Install]
WantedBy=multi-user.target



In meinem Fall verbinden die externen FHEM Installationen alle (mit jeweils einem eigenen port) zu einer zentralen Lightsail Instanz, die von Amazon Web Services in Irland bereitgestellt wird.
Das eigene Netzwerk zuhause ist damit komplett außen vor.

Von der Lightsail Instanz aus kann ich dann jedes externe FHEM über einen bash-Alias direkt aufrufen

alias blub='clear && ssh -p 9093 localhost'

Funktioniert seit mehreren Jahren völlig problemlos.
-----------------------
Formuliere die Aufgabe möglichst einfach und
setze die Lösung richtig um - dann wird es auch funktionieren.
-----------------------
Lesen gefährdet die Unwissenheit!

tyrolean

...darf ich nach längerer Zeit das Thema nochmals aufgreifen.

Also das mit dem Reverse SSH Tunnel funktioniert prinzipiell sehr gut.
Baue das über diesen Befehl auf:

ssh -R öffentlicheIPLinux:8090:127.0.0.1:8083 username@öffentlicheIPLinux

damit werde ich über den öffentlichen Linux Server wenn ich über Port 8090 zugreife auf meinem FHEM Server weitergeleitet.
Allerdings hätte ich gerne ein wenig mehr Sicherheit, also dass nicht jeder der die öffentliche IP kennt einfach über den Port 8090 weitergeleitet wird.
Gedacht hätte ich daran dass man vorher selbst einen "normalen" SSH Tunnel zu dem öffentlichen Server aufbauen muss damit das Ganze funktioniert.
Könnte mir da jemand einen Tipp geben wie das funktioniert.

Gruß und Danke für eure Hilfe


Wernieman

In dem Du, anstatt der Öffentlichen IP, den Reverse Tunnel nur auf localhost lauschen lässt.

Ungetestet:
ssh -R 127.0.0.1:8090:127.0.0.1:8083 username@öffentlicheIPLinux

Wenn Du jetzt einen ssh-Tunnel zu Server aufbaust (ungetestet)
ssh -L 127.0.0.1:8090:127.0.0.1:8090 username@öffentlicheIPLinux
Wird der (client)localhost:8090 über den Tunnel zum Server geschickt und dort über (server)localhost:8090 zum (ziel)localhost:8083

Ich muß aber gestehen, das ich dafür beinahe, wie betateilchen, nur direkt auf ssh setzen Würde. Also den reverse ssh-Tunnel nur zum ssh-Tunneln verwenden und darüber dann http abfackeln. Kling Kompliierter, ist aber praktisch einfacher .... da ich über ssh mehr machen kann als "nur" http/s
- Bitte um Input für Output
- When there is a Shell, there is a Way
- Wann war Dein letztes Backup?

Wie man Fragen stellt: https://tty1.net/smart-questions_de.html

tyrolean

Danke für die Antwort,

also ich habe es jetzt genau so wie vorgeschlagen versucht, also:

Am "FHEM Pi"
ssh -R 127.0.0.1:8090:127.0.0.1:8083 username@öffentlicheIPLinux
Auf meinem Mac:
ssh -L 127.0.0.1:8090:127.0.0.1:8090 username@öffentlicheIPLinux


Wenn ich jetzt am Mac in Safari öffentlicheIPLinux:8090 eingebe habe ich Zugriff auf mein FHEM bei
127.0.0.1:8090 kommt jedoch in der geöffneten SSH Session:
channel 3: open failed: connect failed: Connection refused
und ich habe keinen Zugriff.

Habe ich da einen prinzipiellen Fehler (Parameter bei ssh -L vergessen) oder wie kann ich der Sache auf den Grund gehen?

Wernieman

Was sagen die sonstigen Logfiles? kern.log/syslog

Muß jetzt gestehen, das ich hier nichts zum testen oder nachbauen habe .. wie geschrieben, war "ungetestet"

Wenn Du auf dem öffentlicheIPLinux bist, kannst Du dann mit wget/curl/lynx/w3m oder sonstigen textbrowser auf die Webside 127.0.0.1:8083
- Bitte um Input für Output
- When there is a Shell, there is a Way
- Wann war Dein letztes Backup?

Wie man Fragen stellt: https://tty1.net/smart-questions_de.html