So verwenden Sie SSH außerhalb des Heimnetzwerks


15

Ich habe kürzlich SSH auf meinem Raspberry Pi eingerichtet. Es lief sehr gut, zumal ich den Computer über mein iPhone mit der App Server Auditor steuern kann . Leider funktioniert dies nur über das lokale Netzwerk.

Wie kann ich meine SSH zum Laufen bringen, wenn ich nicht zu Hause bin? (Funktioniert vorzugsweise mit der App.)


Können Sie einen Port von Ihrem Router weiterleiten?
SteveIrwin

1
@SteveIrwin Das kann ich höchstwahrscheinlich, aber da ich kein Netzwerkkenner bin, würde ich eine einfache Lösung wie Port Map vorziehen . Eigentlich ... kann ich weitergeleitete Ports freigeben, wenn ich das Internet meines Macs mit meinem Pi teile?
xxmbabanexx

Das Einrichten einer Portweiterleitung ist wahrscheinlich mindestens so einfach wie die Verwendung von Port Map. Sie müssen uns mehr darüber erzählen, wie Ihr LAN eingerichtet ist
John La Rooy

Am besten installieren Sie den Weaved-Dienst (www.weaved.com) und erledigen ihn. Alle anderen Tutorials, die Sie im Internet finden, werden Sie auf eine frustrierende Straße führen.
IgorGanapolsky

für den Posten, die die Verwendung von socketxp Verwendung der folgenden Download socketxp in der RPI curl -O schlägt portal.socketxp.com/download/arm/socketxp && chmod + wx socketxp && sudo mv socketxp / usr / local / bin anstelle von Linux Datei.
Jeonghoon

Antworten:


20

Hier sind die Schritte, die ich verwendet habe (unter Debian), die Sie vielleicht nützlich finden.

1. Festlegen der statischen IP für den Pi.

Öffnen Sie die Interface-Datei mit dem Befehl

sudo nano /etc/network/interfaces

Ändern Sie die Interface-Datei wie folgt (das funktioniert bei mir nicht, ich bin mir nicht sicher, ob einige der Zeilen ausgeschlossen werden können).

auto lo
iface lo inet loopback
iface eth0 inet static
address 192.168.1.2  #static ip you want for the pi
netmask 255.255.255.0
gateway 192.168.1.1    # the ip address of the router

c.Überprüfen Sie mit dem Befehl ifconfig, ob das IP geändert wurde

2. Einrichten eines dynamischen DNS

Höchstwahrscheinlich ist die von Ihrem Internetdienstanbieter zugewiesene IP-Adresse dynamisch. Wir benötigen daher eine Möglichkeit, die Änderungen der IP-Adresse aufzulösen. Ich verwende dazu die Software dnsdynamic und ddclient. Beide können kostenlos verwendet werden.

Eröffnen Sie ein Konto bei dnsdynamic

b.Fügen Sie eine neue Domain hinzu und wählen Sie einen Namen und die Domain aus der Liste aus. Sie können jede der verfügbaren Domains mit der von Ihnen gewählten Subdomain auswählen. Klicken Sie auf Verfügbarkeit prüfen und dann auf Hinzufügen

dnsdynamic Screenshot

3. Setzen Sie ddclient auf Pi

Installieren Sie ddclient mit dem Befehl

sudo apt-get install ddclient

Öffnen Sie die Konfigurationsdatei für ddclient mit dem folgenden Befehl und fügen Sie die folgenden Zeilen hinzu.

sudo nano /etc/ddclient.conf

und ändern Sie die Datei wie folgt.

# /etc/ddclient.conf
daemon=600
timeout=10
ssl=yes
protocol=dyndns2
use=web, web=myip.dnsdynamic.com
server=www.dnsdynamic.org
login=x@gmail.com  #userid for dnsdynamic.com
password='xxxx'      #password for the same put inside quotes
x.dnsdynamic.com  #the domain name you created

und speichern Sie die Datei.

d.Wir möchten, dass der ddclient-Dienst beim Neustart automatisch gestartet wird. Gehen Sie wie folgt vor.

sudo nano /etc/rc.local

Fügen Sie den folgenden Befehl vor dem Beenden von 0 hinzu (das ist die letzte Zeile)

sudo /usr/sbin/ddclient -daemon 600 -syslog

Speichern Sie die Datei. Um ddclient zu starten, starten Sie entweder Ihren pi neu oder führen Sie den obigen Befehl an der Eingabeaufforderung aus. Ihr Domain-Name wird bei Bedarf mit der aktuellen IP-Adresse aktualisiert.

4.Portweiterleitung

a.Finden Sie das Modell Ihres Routers.

Gehen Sie zu portforward.com

c.Geben Sie die Marke und das Modell Ihres Routers ein, um eine detaillierte Anleitung zum Weiterleitungsport zu erhalten.

d.Nachdem Sie die Marke und das Modell des Routers ausgewählt haben, klicken Sie auf der umgeleiteten Seite auf die Standardanleitung.

eGeben Sie in das Textfeld Static Ip die statische IP des in Schritt 1 angegebenen Pi ein.

Befolgen Sie die Schritte und leiten Sie Port 22 weiter. Der Quellport muss 22 sein und der Zielport kann beliebig sein. Denken Sie daran, den Zielport zu verwenden, wenn Sie in pi sshing. Um Verwechslungen zu vermeiden, neige ich dazu, die gleiche Quelle und das gleiche Ziel zu verwenden Hafen.

Wenn Sie dem Tutorial gefolgt sind, melden Sie sich von überall an Ihrem Pi an, indem Sie die IP-Adresse durch den Domainnamen ersetzen. Ich benutze pi@hometorrent.dnsdynamic.com: 22, um in mein pi zu sshen.


Vielen Dank! Wenn ich von Exeter zurückkomme, werde ich das ausprobieren!
xxmbabanexx

+1 Große Antwort jedoch brauchen Sie wirklich zu verwenden , sudoin /etc/rc.local, ist das nicht schon als root ausgeführt wird ?
HeatfanJohn

So total vermasselt meine Ngrok und Weaved Konfigurationen. Jetzt kann ich überhaupt keine Verbindung herstellen!
IgorGanapolsky

2

Zuerst möchten Sie die Portweiterleitung einrichten. Jeder Router ist etwas anders, daher müssen Sie die Details für Ihren Router nachschlagen.
Es gibt allgemeine Anleitungen für die Portweiterleitung , die für die meisten Router geeignet sind. Ich empfehle jedoch, eine Anleitung für Ihr tatsächliches Routermodell zu finden.

Legen Sie einen denkwürdigen Port für die Verknüpfung mit Ihrem Himbeer-Pi fest, z. B. 23456 oder so. Achten Sie darauf, die allgemeinen Portnummern nicht zu überschreiben .

Zum Schluss machen Sie mit ssh Folgendes:

$ ssh -p 23456 user@IP

Wo:


Warum kann ich nicht Port 22 anstelle des benutzerdefinierten 23456 verwenden?
IgorGanapolsky

1
@IgorGanapolsky Sie können das tun, aber 1) wenn Sie einen anderen Computer haben, mit dem Sie sich über SSH außerhalb Ihres Hauses verbinden möchten, liegt ein Konflikt vor und 2) es ist riskanter, da sich viele "Hacker" über Port 22 anmelden
Daher wird

2

Der Zugriff auf Ihr RaspberryPi (oder sogar auf Laptops / Server) von außerhalb Ihres Heimnetzwerks (dh aus dem Internet) ist keine leichte Aufgabe, da Ihr Heim-Laptop oder RaspberryPi nur eine lokale IP-Adresse hat (im Bereich 10.xxx oder 192.168.xx) Angebot). Es hat keine öffentliche IP-Adresse, die im Internet sichtbar ist.

Die einfache Antwort auf Ihre Frage lautet, dass Sie kostenlose Onlinedienste wie SocketXP verwenden, die einen sicheren öffentlichen Tunnelendpunkt für SSH in Ihrem RaspberryPi von außerhalb des Heimnetzwerks bereitstellen.

SocketXP bietet eine einfache, sichere und einfache Möglichkeit, von außerhalb des Netzwerks auf RaspberryPi zu Hause zuzugreifen. Bei SocketXP müssen Sie keine Einstellungen in Ihrem WLAN-Router hacken. Es funktioniert sofort. Um zu erfahren, wie Sie Ihr RaspberryPi von außen auf SSH einstellen , lesen Sie diesen Blog darüber, wie Sie mit SocketXP SSH auf Ihr RaspberryPi übertragen können.

So richten Sie SocketXP ein:

Schritt 1 : Installieren Sie den SocketXP-Client mit dem folgenden Befehl auf Ihrem RaspberryPi.

$ curl -O https://portal.socketxp.com/download/linux/socketxp && chmod +wx socketxp && sudo mv socketxp /usr/local/bin

Schritt 2: Verbinden Sie den SocketXP-Client mithilfe des folgenden Befehls mit dem SocketXP-Cloud-Dienst. Sie müssen sich unter https://portal.socketxp.com registrieren , um Ihr eindeutiges Authentifizierungstoken zu erhalten.

$ socketxp -register "eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJleHAiOjE1NDk1MTg0MDAsImlkIjoiZ2FuZXNodmVscmFqYW5AZ21ha6K208n0.cB2uYevpH4lWIQGQUJdQ0eiEDqS8OiP_YOiqernnui3rjjadfadsfsfas34"

Schritt 3 : Holen Sie sich einen öffentlichen Tunnel-Endpunkt, um über das Internet auf Ihren RaspberryPi zuzugreifen.

$ socketxp -connect tcp://localhost:22

Tunnel Access -> tunnel.socketxp.com:35277

Schritt 4 : SSH aus dem Internet in Ihr RaspberryPi mit dem folgenden Befehl.

$ ssh raspberry-username@tunnel.socketxp.com -p 35277

Dabei ist "Himbeer-Benutzername" der Benutzername / das Kennwort, mit dem Sie sich bei Ihrem RaspberryPi mit SSH anmelden.


1

Diese Frage ist alt, da die Wahrscheinlichkeit geringer ist, dass Sie eine öffentlich zugängliche IPv4-Adresse erhalten. Höchstwahrscheinlich stehen Sie hinter einer CGNAT, dh, Sie teilen eine einzige öffentliche IPv4-Adresse mit anderen Kunden des Internetdienstanbieters. Es ist also nicht möglich, eine Portweiterleitung zu Ihrem PI oder etwas anderem durchzuführen.

Wenn Sie über IPv6 verfügen, können Sie Ihrem PI eine statische Adresse geben und auf Ihrem Router Zugriff darauf gewähren. Viele Mobilfunkanbieter geben IPv6 jetzt an Telefone weiter. Die alten "landbasierten" ISPs (Glasfaser, DSL, Koax usw.) ziehen oft ihre Füße hoch.

Sie könnten auch einen günstigen VPS (Virtual Private Server) mit einem öffentlichen IPv4 irgendwo in der Cloud erwerben und einen SSH-Tunnel vom PI zum VPS herstellen.


0

Neben der Antwort von phalt sollten Sie einen der dynamischen DNS-Dienste wie z. B. No IP (Keine IP) auschecken . Mit ihnen können Sie unter einem statischen Hostnamen auf Ihr Heimnetzwerk zugreifen, obwohl sich Ihre IP-Adresse möglicherweise täglich ändert, weil Ihr DSL- oder Kabelanbieter die Verbindung zu Ihnen getrennt hat. Sie haben auch eine schöne Einstiegsseite , auf der Sie auch erfahren , wie Sie Ihren Router entsprechend einrichten.

Möglicherweise möchten Sie das inadynPaket auf Ihrem Raspberry Pi installieren , um Ihre No-IP-DNS-Einträge zu aktualisieren, wenn sich die IP ändert. Sie können dies tun, indem Sie Folgendes ausführen:

sudo apt-get install inadyn

Aus der inadyn README habe ich diesen Beispielaufruf genommen:

inadyn --dyndns_system default@no-ip.com -u USER-p PASS -a HOST

Hoffe das hilft.


No-Ip verfügt über einen DUC (Dynamic Update Client), der sicherstellt, dass sich Ihre IP-Adresse nicht ändert.
IgorGanapolsky

0

Zusätzlich zu Steve Irwins Antwort:

Schritt 1:

Wenn Sie eine Verbindung über WLAN herstellen, verwenden Sie:

iface wlan0 inet static
wpa-ssid "xxx" #<=your ssid
wpa-psk "yyy"  #<=your pw
address 192.168.1.xxx #<=preferred static ip (xxx<255)
netmask 255.255.255.0
gateway 192.168.1.1 #<=router's ip

Schritt 2:

Nachdem Sie die obigen Einstellungen geändert haben, müssen Sie neu starten networking:

sudo /etc/init.d/networking restart

Ich habe auch 2 Zeilen vor dem statischen Block, Auto wlan0 allow-hotplug wlan0 ich es in diesem Beitrag nicht gefunden raspberrypi.stackexchange.com/a/10320/10148 Ich habe auch versucht es ohne sie zu tun , aber etwas hat nicht funktioniert.
XandruCea

Diese Antwort sollte aufgrund von Änderungen in der Raspbian-Netzwerkkonfiguration und im Init-System als veraltet angesehen werden.
Goldlöckchen

0

Zusätzlich bieten einige Router eine integrierte Unterstützung für einige dynamische DNS-Dienste. Sie können diese Option (falls vorhanden) in Ihrem Router aktivieren, um zu vermeiden, dass der Client auf Ihrem PI installiert wird (und dabei ein wenig Overhead gespart wird).


0

Sie haben also einen SSH-Server (Ihren Raspberry PI) hinter einer Firewall (Ihrem Router) und möchten von überall aus eine Verbindung herstellen. Nehmen wir an, Ihr SSH-Server ist ordnungsgemäß eingerichtet. Wenn Sie also 'SSH-Benutzername @ LocalHost-Datum' auf Ihrem Raspberry ausführen, wird das aktuelle Datum und die aktuelle Uhrzeit angezeigt.

Sie müssen zwei Probleme lösen:

  • Ihr Router muss einen festen Port an Ihren Himbeer-SSH-Port weiterleiten (normalerweise 22).
  • Sie müssen die öffentliche IP-Adresse Ihres Routers kennen (diese ändert sich normalerweise beim erneuten Verbinden des Routers und bis zu einmal in 24 Stunden).

Portweiterleitung & DynDNS

Es gibt Lösungen (wie andere darauf hingewiesen haben):

  • Das Öffnen einer Portweiterleitung auf Ihrem Router ist für jeden Router spezifisch und wird normalerweise auf der Router-Einstellungswebsite durchgeführt.
  • Die Ermittlung der aktuellen IP-Adresse erfolgt am einfachsten über eine externe Website ( https://www.google.com/search?q=whats+my+ip ). Wenn sich Ihre IP-Adresse regelmäßig ändert, erhalten Sie einen dynamischen DNS-Eintrag ( https://www.noip.com/ , https://dyn.com/dns/ usw.).

Bei korrekter Einrichtung ist das Anschließen Ihres Rasbperry Pi möglicherweise möglich mit:

ssh username@[yourIP] -p [port] 
# or using dyndns 
ssh username@myname.dyndns.org -p [port]

Mit sshhub.de

Eine andere sehr praktische Lösung, die bisher nicht erwähnt wurde, ist SSHHub (Disclamer, ich bin der Autor). Es verwendet die eigene Weiterleitung von ssh, um von überall auf Ihren Rasperry PI zuzugreifen. Es ist zuverlässig, kostenlos und ziemlich einfach einzurichten . Einmal registrieren:

ssh info@sshhub.de register

Laufen Sie auf Ihrem Raspberry PI:

while true; do ssh [username]@sshhub.de -R 22:localhost:22 -N -o ServerAliveInterval=10; sleep 10; done

...und das ist es! Sie können Ihren Raspberry Pi von überall anschließen:

ssh -J [username]@sshhub.de localhost

Hallo und herzlich willkommen bei Raspberry Pi! Bitte nehmen Sie an der Tour teil und besuchen Sie das Helpcenter, um zu sehen, wie die Dinge hier funktionieren. Vielen Dank für Ihren Beitrag, aber bitte beachten Sie, dass wir Sie bitten , Ihre Zugehörigkeit in Ihren Antworten offenzulegen . (Ich gehe davon aus, dass Sie der Autor der empfohlenen Software sind.)
Ghanima

Vielen Dank, dass Sie mich in die richtige Richtung weisen. Ich bin der Autor. Ich möchte mit meiner Antwort auf jeden Fall einen Mehrwert für Menschen bieten, die nach einer Lösung suchen. Und ich hoffe, mein macht so gut wie sshub sich.
Oliver

0

Sie können ein VPN verwenden, um den eingehenden Zugriff auf Ihren pi zu ermöglichen. OpenVPN ist eine Lösung, für die Sie einen Computer benötigen, auf den über das Internet zugegriffen werden kann (ein eingehender Port). Solange Sie jedoch über einen Computer verfügen, müssen die anderen Computer nicht so sein, wie sie Clients für den OpenVPN-Server sein können.

Eine andere Möglichkeit wäre die Verwendung eines Dienstes wie ZeroTier, der zentralisierte Server zum Erstellen eines VPN bereitstellt, sodass Sie keinen eigenen Server ausführen müssen. Dies ist auch kostenlos.


Eine weitere sehr gute Option ist die Verwendung von Wireguard .
Ingo vor
Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.