Mein Problem besteht darin, einen Weg zu SSH in einen Linux-Server (Ubuntu 18.04) zu finden, dessen IP-Adresse sich täglich ändert.
Ich habe einen Kunden, dem ich gelegentlich bei Verwaltungsaufgaben helfe. Ich muss ssh in den Computer, wenn sie Hilfe benötigen, aber sie haben keine statische IP, so dass sich die öffentliche IP des Servers ständig ändert. Ich habe ein kleines Skript erstellt, um die IP-Adresse des Linux-Computers zu melden, und festgestellt, dass sie sich einmal täglich gegen Mittag ändert.
Ich kann SSH einrichten und es funktioniert sowohl lokal als auch remote ... bis sich die IP-Adresse ändert. In diesem Fall kann ich auch mit der neuen IP-Adresse keine Remoteverbindung mehr herstellen.
- Muss ich den SSH-Dienst jedes Mal neu starten, wenn sich die IP-Adresse ändert?
- Wenn ja warum?
- Muss ich weitere Maßnahmen ergreifen, wenn sich die IP-Adresse ändert, um den SSH-Zugriff zu ermöglichen?
AKTUALISIEREN
Mein Problem ist, dass ich die neue IP-Adresse NICHT finde. Ich habe bereits ein Skript dafür. Das Problem ist, dass der Server nicht mehr reagiert, sobald sich die IP ändert, obwohl ich versuche, eine Verbindung mit der neuen IP-Adresse herzustellen.
Wenn ich den SSH-Dienst auf dem Zielcomputer neu starte, habe ich erneut Remotezugriff. Aber ich verstehe nicht, warum ich das tun muss. Ich würde gerne die Grundursache kennen, um eine bessere Lösung zu finden.
Die meisten Leute scheinen zu denken, dass SSH funktionieren sollte, solange wir die neue IP kennen. Ist dies also etwas Einzigartiges für den 18.04? Ich habe diesen Server kürzlich für den Client installiert, daher sind alle Konfigurationseinstellungen weiterhin Standard. (Die würden nicht wissen, wie sie es ändern sollen.)
quelle
ListenAddress <dynamic host name>
Seltsames passieren , wie das Ausführen von DDNS und so etwas wie in der sshd-Konfigurationsdatei, vielleicht weil jemand nicht wollte, dass interne Benutzer ssh auf den Server können. Dies würde tatsächlich einen Neustart des SSH-Servers jedes Mal erfordern, wenn sich die IP ändert.Antworten:
Die anderen Antworten scheinen eines in Ihrer Frage übersehen zu haben:
DDNS hilft Ihnen dabei, die neue IP-Adresse herauszufinden, aber das scheint hier nicht das Problem zu sein.
Leider ist der Server eine neue IP bekommen sollte kein Problem in dem Standard - Setup, wo der ISP einen Router bietet der Server eine interne Adresse hinter dem Router hat, und der Router funktioniert das Port - Forwarding. Möglicherweise müssen Sie weitere Informationen zur Netzwerktopologie bereitstellen, um eine gute Antwort zu erhalten.
Was ich könnte mir vorstellen , ist der Server nicht hinter einem Router zu sein und seine eigene PPPoE - Verbindung zu tun, und a) der SSH - Server an dem Punkt der Neustart des Servers, b) eine Firewall auf dem Rechner auf die spezifische Schnittstelle Adressbindung , die eingehende ssh ermöglicht , Nur die IP des Servers, wobei die Firewall nicht aktualisiert wird, wenn sich die IP ändert.
Führen Sie a aus, um den ersten Fall zu überprüfen
netstat -nta | grep -w 22 | grep LISTEN
. Wenn dort 0.0.0.0:22 steht, ist das in Ordnung. Wenn eine bestimmte IP-Adresse aufgeführt ist, überprüfen Sie die sshd-Konfigurationsdatei (/etc/sshd.conf
) aufListenAddress
.Um den zweiten Fall zu überprüfen,
iptables -L -n
überprüfen Sie, ob eine der Regeln in derINCOMING
Kette mit der IP und dem Port 22 Ihres Servers übereinstimmt.Wenn eine dieser Adressen die aktuelle Serveradresse hat, müssen Sie sie entweder in 0.0.0.0 ändern (stellen Sie sicher, dass Sie über die Auswirkungen auf die Sicherheit informiert sind) oder die Regel / Konfiguration aktualisieren, wenn sich die IP ändert.
Bearbeiten
Da sich der Server hinter einem Router befindet, gelten die oben genannten Ideen wahrscheinlich nicht (*). In diesem Setup verfügt der Router über eine externe IP-Adresse (die sich täglich ändert), und Ihre internen Geräte sollten über 10.xyz- oder 192.168.xy-Adressen verfügen, die sich nicht ändern sollten. Sie stellen eine Verbindung zur externen Adresse her, und der Router sollte eine Portweiterleitungsregel an die interne Adresse senden.
Diese Portweiterleitung sollte nicht unterbrochen werden, wenn sich die externe IP ändert (vorhandene SSH-Verbindungen werden jedoch getrennt). Möglicherweise handelt es sich jedoch um eine Regel, die nicht von Ihnen eingerichtet wurde, sondern durch eine UPNP-Magie, bei der der Router UPNP-Weiterleitungen löscht, wenn sie empfangen werden eine neue Adresse und sshd ruft die Regel nur beim Neustart auf. Haben Sie selbst eine Portweiterleitung im Router eingerichtet?
Oder es ist die interne IP des Servers, die sich ändert. In diesem Fall ist ein schwerwiegender Fehler mit Ihrem DHCP aufgetreten. Geben Sie Ihrem Server eine feste interne Adresse.
Oder verwenden Sie IPV6? In einigen Konfigurationen ändert ein Gerät ständig seine IP-Adresse, um die Nachverfolgung zu vereinfachen. Siehe zum Beispiel https://www.internetsociety.org/blog/2014/12/ipv6-privacy-addresses-provide-protection-against-surveillance-and-tracking/ - aber in diesem Fall schämen Sie sich dafür, dass Sie dies nicht tun Erwähnen Sie es in Ihrem ursprünglichen Beitrag. Dies kann bedeuten, dass Ihr Router überhaupt kein NAT ausführt und meine ursprünglichen Ideen auch hinter einem Router noch gültig sind.
quelle
Dynamisches DNS ist eine Option, eine andere besteht darin, die Server-Mail zu erhalten oder Ihnen auf andere Weise die IP-Adresse zu senden. Ein einfacher HTTP-Aufruf reicht aus (für einen Endpunkt, den Sie steuern und anfordern).
Es ist auch möglich, das gesamte öffentliche Netzwerk umgekehrt zu lösen. Möglicherweise hat der Server einen Reverse-Tunnel oder eine VPN-Verbindung eingerichtet, die von der IP-Änderung nicht betroffen ist.
In Bezug auf Dienste, die nicht auf die neue Adresse antworten: Dies hängt vollständig von Ihrer Netzwerkeinrichtung ab. Beispiel: WAN-IP auf einer internen Schnittstelle über DHCP und ein SSH-Server, der so eingestellt ist, dass er nur die beim Start bekannte IP-Adresse auf Ihrer Schnittstelle abhört, bedeutet, dass sshd bei Schnittstellenänderungen neu gestartet werden muss.
quelle
Sie sollten sich wirklich mit ddns-Diensten befassen. Soweit es möglich ist, eine Verbindung zu einem bestimmten Computer mit dynamischer IP-Adresse herzustellen; ddns ist die am häufigsten verwendete Lösung.
Gehen Sie zu https://noip.com und melden Sie sich für ein Konto an (es ist, ähm ... angeblich ... off ... cof ... Kostenlos für 1-3 Computer, die im selben Netzwerk ausgeführt werden (wenn ich mich nicht irre, zitieren Sie nicht Ich hier: Es ist schon eine Weile her, dass ich einem dieser "kostenlosen" Dienste vertraut habe ...). Es gibt auch andere Alternativen wie Afraid DNS ( https://freedns.afraid.org/). Und sogar Ciscos Open DNS: könnte auch verwendet werden (vorausgesetzt, dies ist nicht nur Ihr Kunde, ich würde vorschlagen, dass Sie sich für eine Testversion eines Umbrella-Kontos anmelden, es ausprobieren und sich später für den Real anmelden Deal >>> Sie haben sogar eine von ihnen GUI-ähnliche herunterladbare Erweiterungen erhalten, die den DNS-Hostnamen automatisch erneuern, wenn sich die IP-Adresse Ihrer Kunden ändert. Es ist wirklich die einfachste, nicht technisch versierte Methode, die mir bekannt ist falls du einen deiner Kunden anrufen musst und fragst, ob du lieber die GUI herunterladen willst ....])
quelle
Manchmal dauert es eine Weile, bis DHCP-Änderungen wirksam werden. Versuchen Sie, den DHCP-Client auf dem Zielcomputer zu recyceln
Nein. Sie müssen Ihren SSH-Dienst nur recyceln, wenn sich die Konfiguration ändert (
/etc/ssh/sshd_conf
).Nein.
Ich habe eine Lösung, die davon ausgeht, dass Sie sendmail auf Ihrem Zielcomputer eingerichtet haben.
Dieses Skript sendet eine E-Mail mit der IP-Adresse, die die Welt für uns hält (Danke ipify.org). E-Mail hat immer die aktuellste IP-Adresse.
Fügen Sie das Skript ein
/etc/dhcp/dhclient-exit-hooks.d
Wenn dies nicht funktioniert, können Sie jederzeit einen Cron einrichten, der Ihnen die aktuelle IP-Adresse sendet (verlieren Sie die case-Anweisung).
quelle
Über den Tellerrand hinaus denken - könnten Sie eine feste IPv6-Adresse festlegen? Es sind normalerweise nur IPv4-Adressen, die sich aufgrund ihrer Knappheit ändern müssen.
quelle
Was ich seit fast einem Jahr mache. Ich bin im Januar dieses Jahres auf Ihr Problem gestoßen, als ich an meiner örtlichen Universität eine Rede hielt.
Dieses Skript läuft seitdem auf meinem Computer: // Ziemlich selbsterklärend //
Python 3.x sollte einwandfrei funktionieren Vielleicht nicht die beste Lösung, aber es funktioniert.
Sie erhalten jedes Mal eine E-Mail in Ihrem Posteingang, wenn sich die öffentliche IP-Adresse des Computers ändert.
Nun zu Ihren Fragen:
Muss ich den Dienst jedes Mal neu starten, wenn sich die IP-Adresse ändert? Wenn Sie mit dem Neustart des Dienstes die Wiederherstellung der SSH-Verbindung meinen, ja.
Wenn ja warum? Denn wenn die Adresse, mit der Sie kommunizieren möchten, nicht mehr den gewünschten Dienst bietet. Es ist nicht mehr deine Maschine.
Muss ich weitere Maßnahmen ergreifen, wenn sich die IP-Adresse ändert, um den SSH-Zugriff zu ermöglichen? Nur SSH an die neue Adresse.
Prost! JSR
quelle
Es lohnt sich, dies von einer anderen Seite aus zu betrachten: Normalerweise ist es viel einfacher , eine Verbindung nach außen vom Computer aus herzustellen , die Ihre Aufmerksamkeit erfordert (DNS-, NAT- und andere Firewall-Einstellungen spielen keine Rolle oder sind viel einfacher).
Sie können dies verwenden, um eine kugelsichere und einfache Lösung für den Zugriff auf eine Remote-Maschine zu erstellen
R
. Die einzige Voraussetzung ist, dass Sie öffentlichenssh
Zugriff auf einen Ihrer eigenen lokalen Computer gewähren können (nennen wir esS
). Gehen Sie dann wie folgt vor:Erstellen Sie eine
ssh
Verbindung vonR
bis nach außenS
und stellen Sie einen umgekehrten Tunnel wieder her inR
:ssh -L 22:<address-of-S>:22000
Auf
S
, verwenden Sie den Reverse - Tunnel zussh
in der entfernten MaschineR
:ssh -p 22000 127.0.0.1
Schritt 1 kann manuell und bei Bedarf von der Remote-Seite ausgelöst werden, wenn Ihre Unterstützung benötigt wird. Alternativ können Sie einen Dienst erstellen, der einen
R
solchen umgekehrten Tunnel kontinuierlich aufrechterhältS
.Ich habe ein solches Setup verwendet, um mich bei entfernten (mobilen) Systemen anzumelden, die sich hinter Firewalls / NAT befanden und überhaupt keine DNS-Einträge hatten.
quelle
Wenn Sie nur eine Remote-Anmeldung benötigen, verwenden Sie mosh . Abgesehen davon, dass es in der Lage ist, IP-Änderungen hervorragend zu bewältigen (fast ohne Latenz während des Switches), bietet es auch andere Vorteile gegenüber einfachem
ssh
, wie lokales Vorhersage-Echo, geringe Latenz und eine viel schnellere Wiederherstellung nach unterbrochenen Verbindungen.Wenn Sie speziell benötigen
ssh
(z. B. X11-Weiterleitung oder ähnliches), empfehle ich, VPN (z. B. OpenVPN), vorzugsweise über UDP, mit einem kurzen Keepalive einzurichten. TCP-Verbindungen (dh Ihr SSH) über VPN werden nach einer IP-Änderung wiederhergestellt und bleiben verbunden. Es dauert nur länger (bis zu einer Minute oder so), aber Sie können mit/proc/sys/net/ipv4/tcp_*
Einträgen spielen, um die Akzeptanz zu erhöhen.Bearbeiten:
ssh
eine Authentifizierung, aber nach der Authentifizierung bleibt die Verbindung bestehen, bis Sie sichssh
abmelden (oder neu starten), und Sie können den Fehler nach Belieben untersuchen (z. B. strace -f -p pid_of_sshd ).mosh
ohne zu verwendenssh
, Antwort von hier angepasst :Auf dem Server ausführen:
Sie erhalten ein Ergebnis wie
QzdRHbAWzL7eRobi75DCrz
Auf dem Client ausführen:
Beachten Sie, dass
$serverip
dies eine IP sein muss, keine Hostnamenauflösung.Wie Sie den Schlüssel von einer Seite zur anderen bekommen, liegt bei Ihnen. Ich würde vorschlagen, mit einem vorinstallierten Schlüssel zu verschlüsseln und Instant Messaging, Mailing oder einen lokalen Benutzer per Telefonanruf zu diktieren.
ssh
installiertinetd
und ausgeführt wird, nicht als eigenständiger Daemon, z. B. über diese Konfigurationszeile für "classic" inetd.conf, wird bei jeder Anmeldung ein neuer Daemon ausgeführt (beachten Sie, dass nicht alle Inetd Gabeln behandeln IPv6):ssh stream tcp6 nowait root /usr/sbin/sshd sshd -i
quelle