Wie kann ich so konfigurieren, dass ich über eine dynamische IP-Adresse immer SSH über das Internet mit meinem System verbinden kann?

11

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

user2813274
quelle
Können Sie zur 3. Maschine ssh?
Anthon
@Anthon Ich denke schon, ich habe sie AB und C umbenannt und Beschreibungen für sie hinzugefügt, hoffentlich klärt es das auf
user2813274
Husten no-ip.com Husten
Joshua
1
no-ip.com hilft nicht, wenn die Perimeter-Firewall an Ihrem Standort keinen Rückverkehr zulässt!
Bobstro
Ich habe sshsehr kurz Tunnel benutzt. Ich konnte sie jedoch niemals dazu bringen, wach zu bleiben, selbst mit autossh; 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.
Blacklight Shining

Antworten:

11

Wenn Sie die Maschine C im Internet haben, erstellen Sie dort ein spezielles Konto mit dem Namen sesameund auf A erstellen Sie ein Konto mit einem öffentlichen / privaten Schlüssel, von dem Sie den öffentlichen Schlüssel auf das sesameKonto auf C kopiert haben .

Sie können sich jetzt von A nach C anmelden, aber anstatt dies zu tun, tun Sie Folgendes:

ssh -N -R 19930:localhost:22 sesame@yourserverC

(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 sesameKonto sein, ich verwende verschiedene Konten). Und wenn Sie auf C sind, melden Sie sich bei A an mit:

ssh localhost -p 19930

Sie können natürlich eine andere Nummer als 19930 verwenden.

Es ist möglich, das ssh -N -R ...von auszuführen, /etc/rc.localwenn Ihr privater Schlüssel auf A nicht kennwortgeschützt ist. Stellen Sie in diesem Fall sicher, dass Sie sesameein 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 sesamein /etc/passwdauf /bin/false, so dass Sie nicht mehr auf das Konto für die Anmeldung verwenden können.

Anthon
quelle
Diese Lösung unterscheidet sich von der Verwendung von TeamViewer. Dort wird der Server zum Öffnen der Ports verwendet, die dann zur direkten Kommunikation umgeleitet werden. Genau wie Programme wie BitTorrent direkt kommunizieren, nachdem sie Maschinen zum Herunterladen gefunden haben (ohne dass sie zuvor Ports öffnen müssen).
Anthon
Der Hauptunterschied besteht also darin, dass auf diese Weise der gesamte Datenverkehr über Server C geleitet wird, während C nur zum Herstellen einer Verbindung und dann nicht für den Rest der Verbindung verwendet wird - damit bin ich einverstanden. Was die Sicherheit angeht, haben Sie einen guten Punkt. Gibt es etwas, das ich besonders tun sollte, damit Sesam auf C nichts anderes kann als das absolute Minimum an Anmeldung? (RHEL-System)
user2813274
1
@ user2813274 In diesem Szenario durchläuft tatsächlich der gesamte Verkehr C (was die Nützlichkeit von BitTorrent beeinträchtigen würde). Ich bin nicht sicher, wie weit Sie das sesameKonto auf C einschränken können. Es kann sein, dass Sie es /bin/falseals Anmeldeshell ausführen können (da sich ssh nie wirklich anmeldet) oder es auf andere Weise einschränken können, indem Sie einen command=Parameter in~/.ssh/authorized_keys
Anthon
@ user2813274 Falls Sie sich nicht versucht: Wenn Sie den Reverse - Proxy ein spezielles Konto für die Einrichtung haben, Sie können Anmeldungen durch Ändern der Login - Shell auf dieses Konto deaktivieren /bin/false.
Anthon
1
@ user2813274 Ja, ich habe das ausprobiert und es würde mir ermöglichen, den Reverse-Tunnel einzurichten (Sie benötigen ein anderes Konto, um zu Server C zu gelangen, um das ssh localhost -p portnumnatürlich zu tun )
Anthon
7

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.

garethTheRed
quelle
Ich mag das, da es nicht einmal C erfordert, wenn die Netzwerke IPV6 unterstützen. Ich muss es jedoch ausprobieren - irgendwelche Probleme, wenn Firewalls dies standardmäßig blockieren?
user2813274
1
Sixxs bieten mehr als ein Protokoll zum Tunneln von IPv6. Wenn Sie Anything In Anything (AYIYA) verwenden, müssen Sie den TCP-Port 3874 und den UDP-Port 5072 vom Pi zum Internet öffnen. In Heimnetzwerken sollte dies in Ordnung sein. Unternehmens- oder Campus-Netzwerke können unterschiedlich sein.
GarethTheRed
Die Installation des Tunnels klang machbar, aber es scheint, als müsste ich mich für den Sixxs-Dienst anmelden, warten, bis sie sich mit einer IP-Adresse usw. bei mir melden - nicht mehr ganz so einfach - immer noch möglicherweise eine gute Lösung, aber ich Ich glaube nicht, dass es der Weg ist, den ich jetzt gehen werde.
user2813274
1

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.

dashohoxha
quelle
0

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.

Wicaksono Trihatmaja
quelle
Wat. Das ist unsicher. Sie vertrauen einer Zufallsnachrichten-App. Sie sagen, dass OP diese Zufallsnachrichten-App ändern sollte, damit sie funktioniert. Dies bedeutet nicht einmal, dass die App für zufällige Nachrichten vollständig mit so etwas wie vim brechen und eine schreckliche Latenz haben würde.
Noch ein Benutzer
Nun, wenn Sie es nur zum Senden eines Befehls verwenden, denke ich, dass es in Ordnung ist. Wenn Sie es für etwas wie vim verwenden, denke ich nicht, dass es gut ist. Guter Rat. Ich werde meine Antwort bearbeiten
Wicaksono Trihatmaja
Ich denke nicht, dass dies das ist, was ich will, ich möchte vollen Shell-Zugriff, nicht wirklich weniger als das - was die Dosierung des Pi betrifft. Ich bin nicht wirklich besorgt, vor allem, weil ich ein spezielles Setup durchführen muss Verbinde dich sogar selbst damit, zweitens, weil die Verbindungen zeitweise unterbrochen werden und sich sowieso zufällig ändern
user2813274
0

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.

Hüpfender Hase
quelle
Äh ... wie unterscheidet sich das von Anthons Antwort?
user2813274