Zugriff auf die Linux-Maschine, die sich hinter einem NAT befindet, ohne GUI?

730
Arun

Eine meiner Debian-Boxen hat keine grafische Benutzeroberfläche. Wie kann man von außen über die Befehlszeile eine Verbindung herstellen (wie AnyDesk, Teamviewer usw.)?

Ich kann SCP & SSH verwenden, um auf diesen Computer zuzugreifen, wenn ich mich im Büronetzwerk befinde. Aber wie kann ich von zu Hause aus zugreifen? Dynamisches DNS (DDNS oder DynDNS) ist in meinem Setup nicht anwendbar, da der Netzwerkanbieter dem WAN-Port des Routers keine öffentliche IP-Adresse zuweist

Public IP und Router WAN IP unterscheidet sich

1
Gibt es eine statische öffentliche IP-Adresse, die Sie verwenden können? (z. B. Ihrem Heimrouter oder einer anderen Maschine zugewiesen, auf die Sie Zugriff haben). Kamil Maciorowski vor 5 Jahren 0
@ KamilMaciorowski, Verwenden eines 4G-Internet-Routers mit Sim Cards. Hier in Katar weist der Internet-Provider den WAN-Routern für 4G-Netzwerke keine öffentliche IP-Adresse zu (ich glaube, sie verwenden einen Proxy). Arun vor 5 Jahren 0
_Provider weist keine öffentliche IP-Adresse zu ... äh ... Wie können Sie dann über das Internet auf etwas zugreifen? Auch wenn Sie wählen, muss eine Adresse vorhanden sein, an die Daten gesendet werden sollen. Baldrickk vor 5 Jahren 0
Sie sollten diese Frage löschen und eine neue einrichten: "Wie verbinde ich mich mit einem Computer über ein NAT, das ich nicht kontrolliere?" Eugen Rieck vor 5 Jahren 0
@EugenRieck, Wie Sie schon sagten, wurde die Frage so geändert, dass sie hinter dem NAT steht. Arun vor 5 Jahren 0

4 Antworten auf die Frage

3
confetti

Reverse SSH ist dein Freund. Dazu benötigen Sie einen SSH-Server. Ich werde Ihnen zwei Ansätze dafür geben, der erste geht davon aus, dass Sie einen SSH-Server von Ihrem Computer zu Hause aus öffnen und ausführen können. Ich versuche, stundenweise eine automatische Verbindung herzustellen, damit Ihr PC zu Hause nicht immer online sein muss. Da dies manchmal unmöglich oder schwierig sein kann, füge ich auch eine einfachere und sicherere Lösung hinzu, die allerdings einen Linux-VPS erfordert. Sie sind normalerweise nur 2 $ / Monat.

Lösung 1 - Verwenden Sie nur Ihren PC zu Hause - Eine statische IP-Adresse vorausgesetzt:

Vorbereitung auf dem Debian-Server:

Ich gehe davon aus, dass Sie croninstalliert und ausgeführt haben. Erstellen Sie eine neue Datei /etc/cron.hourlymit folgendem Inhalt: (vergessen Sie nicht chmod +xdie Datei!)

#!/bin/bash cstate=$(netstat -na | grep "tcp" | grep "<IP-of-home-machine>:22" | tr -s " " | cut -d " " -f 6 | head -n 1) cdate=$(date "+%Y-%m-%d %H:%M:%S") if [[ $cstate == "ESTABLISHED" ]] || [[ $cstate == "TIME_WAIT" ]] then echo "[$cdate] SSH connection up. ($cstate)" >> /var/log/check-ssh-relay.log else echo "[$cdate] SSH connection broken. ($cstate) Reconnecting..." >> /var/log/check-ssh-relay.log ssh -N -f -R 12122:localhost:22 <username>@<IP-of-home-machine> fi 

Dies prüft stündlich, ob die Verbindung besteht, und versucht, die Verbindung erneut herzustellen, falls dies nicht der Fall ist. Nützlich, wenn Ihr PC zu Hause nicht immer eingeschaltet ist. Es schreibt Protokollinformationen in /var/log/check-ssh-relay.log. Die Authentifizierung erfolgt über SSH-Schlüssel. Stellen Sie daher sicher, dass Sie diese Einstellung vorab richtig vorgenommen haben.

Auf Ihrem Computer zu Hause:

Vorausgesetzt, Sie haben den openssh-server ordnungsgemäß eingerichtet, müssen Sie jetzt nur noch Folgendes tun:

$ ssh <server-username>@localhost -p 12122 

So erstellen Sie die SSH-Verbindung. SCP, SFTP und co. funktioniert natürlich auch.

Lösung 2 - Verwenden eines anderen VPS als Relais:

Ich benutze diese Lösung persönlich. Meistens, weil ich zu Hause keine statische IP-Adresse habe.

Vorbereitung auf dem Debian-Server:

Genau wie in Lösung 1, außer dass <IP-of-home-machine>Sie hier die IP des VPS verwenden.

Vorbereitung auf der VPS:

Sie müssen hier lediglich den folgenden Befehl als root-Benutzer ausführen:

$ ssh -g -f -N -L 0.0.0.0:13122:localhost:12122 root@localhost 

Das -gist hier wichtig, um globale eingehende Verbindungen für diesen Port-Forward zuzulassen.

Auf Ihrem PC zu Hause (oder buchstäblich überall):

Verbinden Sie sich jetzt einfach mit Ihrem VPS über den Port 13122(wie oben angegeben):

$ ssh <username>@<VPS-IP> -p 13122 
In einem Test-Setup habe ich bestätigt, dass diese Methode für mich gut funktioniert! verwendet nur 2 Befehle zum Testen von ssh -N -f -R 12122: localhost: 22@ In Server & ssh @localhost -p 12122 vom Clientcomputer Arun vor 5 Jahren 1
2
Eugen Rieck

Wenn Sie keine GUI haben, benötigen Sie lediglich eine Remote-Konsole. Dies wird normalerweise mit einer sshKombination aus sehr guter Sicherheit und Mehrwertdiensten wie scp(Remote File Copy) erreicht.

Ich habe meine Frage mit Eingaben aus Ihrer (@EugenRieck) -Antwort geändert (ssh & scp-Vorschlag, der in meinem Fall nicht zutreffend ist) Arun vor 5 Jahren 0
2
Baldrickk

Ihr Problem ist wahrscheinlich, dass Sie sich hinter einem NAT befinden, das Sie nicht kontrollieren, und daher keine Portweiterleitung einrichten können.

Die einfachste Lösung hierfür ist das umgekehrte Tunneln. Sie richten eine ssh-Verbindung von der Maschine aus, die Sie steuern möchten, zu der Maschine, von der aus Sie die Steuerung durchführen möchten. (Diese Maschine muss über ssh erreichbar sein.)

Siehe https://unix.stackexchange.com/questions/46235/how-does-reverse-ssh-tunneling-work

Ich brauche wirklich eine Option, um mehr als 2 als Antworten zu wählen. Hier hat Baldrickk bereits den Hinweis & @confetti in einer sehr ausführlichen Art und Weise angegeben !! Arun vor 5 Jahren 0
@Arun Mach dir keine Sorgen, seine Antwort ist besser, ich hatte keine Zeit, einen Leitfaden zu schreiben. Baldrickk vor 5 Jahren 1
2
Shadowcoder

Sie können einen OpenVPN- Server in Ihrem Büro einrichten (vorausgesetzt, Sie können den Port von Ihrem Netzwerk auf das öffentliche WAN weiterleiten), Ihre Nicht-GUI-Box kann eine Verbindung zu ihm herstellen (wie Baldrickks Antwort; Reverse-Tunneling), und dann sollte Ihr Server SSH in die Nicht-GUI-Box zusammen mit allen anderen auf dieser Box ausgeführten Diensten.

Ich sehe einige Probleme mit einem solchen Ansatz. Einer davon ist der, wenn der Client einer Nicht-GUI-Box das Zeitlimit überschreitet, ohne dass SSHing lokal (im selben Netzwerk) und ohne Neustart des Clients erforderlich ist.