Grundsätzlich möchte ich in der Lage sein, so etwas wie Teamviewer zu machen, wo unabhängig von der Netzwerkkonfiguration, solange sowohl mein SSH-Server (Maschine A) als auch mein SSH-Client (Maschine B) über einen Internetzugang verfügen (und einige dritte Server, Maschine C. ), Ich kann Zugriff erhalten - der Grund dafür ist, dass ich Maschine A bewegen, an die Stromversorgung anschließen und automatisch eine Verbindung zu einem von mehreren vorkonfigurierten WLAN-Netzwerken herstellen möchte (jedes einzigartig / unterschiedlich). , ohne die Portweiterleitung oder ähnliches in den Netzwerken konfiguriert zu haben und sich über das Internet von Maschine B aus anmelden zu können
Wie kann ich das erreichen? Es macht mir nichts aus, etwas auf einem Server mit einer statischen IP-Adresse einzurichten, um beim Handshake zu helfen, aber es macht mir auch nichts aus, wenn ein Server eines Drittanbieters bereits vorhanden ist (wie es beispielsweise für Teamviewer der Fall ist).
Aus Gründen der Übersichtlichkeit bearbeiten: Ich habe 3 Maschinen, AB und C.
A ist ein kopfloser Himbeer-Pi, der an zufälligen Orten ein- und ausgeschaltet wird. Stellen Sie eine Verbindung zu einem vorkonfigurierten WLAN-Netzwerk her
B ist das Gerät mit einem geeigneten Monitor, einer Tastatur usw., von dem aus ich eine Verbindung herstellen möchte
C ist ein gemieteter AWS-Server, den ich mit einer statischen IP-Adresse habe, der zuverlässig SSH von B aus einbinden und alles installieren kann, was erforderlich ist, um B bei der Verbindung mit A zu unterstützen
quelle
ssh
sehr kurz Tunnel benutzt. Ich konnte sie jedoch niemals dazu bringen, wach zu bleiben, selbst mitautossh
; Wenn der Uplink aus irgendeinem Grund unterbrochen wurde, mussten sie immer von Hand neu gestartet werden. Schließlich habe ich mit OpenVPN ein kleines VPN für mich eingerichtet, und es hat die Arbeit gut gemacht.Antworten:
Wenn Sie die Maschine C im Internet haben, erstellen Sie dort ein spezielles Konto mit dem Namen
sesame
und auf A erstellen Sie ein Konto mit einem öffentlichen / privaten Schlüssel, von dem Sie den öffentlichen Schlüssel auf dassesame
Konto auf C kopiert haben .Sie können sich jetzt von A nach C anmelden, aber anstatt dies zu tun, tun Sie Folgendes:
(Möglicherweise möchten Sie dies mit einer Schlafanweisung oder z. B. 10 Sekunden kombinieren und diese in eine Endlosschleife einwickeln, damit die Verbindung wiederhergestellt wird, wenn das WLAN durch einen Ausfall unterbrochen wird.)
Melden Sie sich normalerweise von Maschine B aus bei jedem Konto an, das Sie auf C haben (kann, muss aber nicht das
sesame
Konto sein, ich verwende verschiedene Konten). Und wenn Sie auf C sind, melden Sie sich bei A an mit:Sie können natürlich eine andere Nummer als 19930 verwenden.
Es ist möglich, das
ssh -N -R ...
von auszuführen,/etc/rc.local
wenn Ihr privater Schlüssel auf A nicht kennwortgeschützt ist. Stellen Sie in diesem Fall sicher, dass Siesesame
ein separates Konto mit eingeschränkter Funktionalität erstellen, damit das Risiko für Ihren Server C begrenzt ist, wenn Ihr Computer A kompromittiert / gestohlen wird. Aus diesem Grund empfehle ich auch, ein separates Konto zu verwenden, um von B nach C zu gelangen.Sie können tatsächlich die Login - Shell - Set für
sesame
in/etc/passwd
auf/bin/false
, so dass Sie nicht mehr auf das Konto für die Anmeldung verwenden können.quelle
sesame
Konto auf C einschränken können. Es kann sein, dass Sie es/bin/false
als Anmeldeshell ausführen können (da sich ssh nie wirklich anmeldet) oder es auf andere Weise einschränken können, indem Sie einencommand=
Parameter in~/.ssh/authorized_keys
/bin/false
.ssh localhost -p portnum
natürlich zu tun )Installieren Sie einen IPv6-Tunnel (z. B. Sixxs ) auf Ihrem Raspberry Pi. Sie haben jetzt eine permanente statische IPv6-Adresse, die online geschaltet wird, wenn Ihr Pi online ist. Stellen Sie sicher, dass Sie Ihren Pi sichern, da er jetzt mit der Welt verbunden ist.
Wenn Ihr B mit einem IPv6-Netzwerk verbunden ist, stellen Sie eine direkte Verbindung zum Pi her. Wenn B nicht mit einem IPv6-Netzwerk verbunden ist, verwenden Sie C als Jump-Server, auf dem Sie eine Verbindung über IPv4 zu C und dann über IPv6 von C zu Ihrem Pi herstellen.
quelle
Schauen Sie sich auch Folgendes an:
Die verwendete Technologie ist die gleiche wie die in der akzeptierten Antwort beschriebene, verwendet jedoch einige Skripte, um Dinge zu automatisieren und die Lösung allgemeiner zu gestalten. Außerdem werden die gesamten Konfigurationen in einem Docker-Container vorgenommen, sodass das Hauptsystem sicher ist, falls etwas kompromittiert wird.
Es bietet jedoch keine automatische Verbindung von A nach C, sondern muss manuell initiiert werden. Vielleicht können Sie die Lösung ein wenig anpassen, damit sie genau das tut, was Sie wollen.
quelle
Vielleicht müssen Sie ein anderes als ssh oder Tunneling-Konzept verwenden. Ich schlage vor, dass Sie ein Messaging-Konzept wie WhatsApp oder Telegramm verwenden. Aber ich denke, wenn Sie so etwas wie vim verwenden möchten, ist es nicht so gut wie ssh.
Telegramm haben Telegramm-CLI-Client, den Sie ändern können, um bestimmte Befehle zu akzeptieren, auszuführen und in der Raspi zu implementieren.
Wenn Sie Telegramm verwenden, können Sie Ihr Netzwerk vereinfachen und zumindest die C-Maschine für den Hub reduzieren, da der C-Server durch einen Telegramm-Messaging-Server ersetzt wird. Das Telegramm enthält bereits einen iPhone- und Android-Client, sodass ich nicht glaube, dass Sie Ihr B benötigen Maschine auch, können Sie Telegramm-Client für bestimmte Betriebssysteme installieren, wenn Sie wollen .. Sicherheit? Telegrammnachricht ist verschlüsselt .. Wenn jemand Ihre Raspi ddos möchte? Sie werden zuerst den Telegrammserver öffnen.
Solange Ihr Raspi eine Verbindung zum Telegrammserver herstellen kann (einfach Ihr Raspi stellt eine Verbindung zum Internet her), selbst wenn sich das Raspi hinter Firewall / Proxy / privater IP / dynamischer IP befindet, können Sie jederzeit die Remote-Verbindung herstellen.
Mit diesem Konzept können Sie die Fernbedienung überall und jederzeit ausführen.
quelle
Ich denke, Sie sollten sich die Reverse-SSH-Port-Weiterleitung ansehen. Kurz gesagt, Sie initiieren zuerst ein SSH von A nach C mit der folgenden Syntax und verwenden dann diesen Port, um von C nach A zurückzukehren. Sie werden die Home-Firewall von A nicht treffen, wenn Sie dies tun, da der R-Pi bereits über einen verfügt ein Tunnel.
ssh -R 2210: localhost: 22 myCoolAwsSite.com
Bitte berücksichtigen Sie dabei die Auswirkungen auf die Sicherheit. Sie können einige Cron Jujitsu hinzufügen, damit die Verbindung nach einem Neustart wiederhergestellt wird.
quelle