Wie kann ich jemandem (wie Oma) über SSH helfen, der sich hinter einem NAT-Router befindet?

14

Um anderen schnell zu helfen, ist SSH sehr nützlich, insbesondere in Kombination mit GNU Screen. Es ist üblich, dass Benutzer sich hinter einem NAT-Router befinden. Selbst wenn der Benutzer den Router konfigurieren kann, dauert es einige Zeit, bis er sich das Passwort merken, die richtigen Optionen finden usw.

Was ist der einfachste Weg, um anderen über SSH zu helfen, wenn sie sich hinter einem NAT-Router befinden?

Derzeit fordere ich die Benutzer auf , ein Terminal zu öffnen und den folgenden Befehl auszuführen und mir ihre IP-Adresse von einer Site wie http://ip.appspot.com/ zu übermitteln :

sudo apt-get install openssh-server ssh-import-id && ssh-import-id lekensteyn

Dies funktioniert natürlich nicht, wenn sie sich hinter einem NAT-Router befinden oder eine persönliche Firewall konfiguriert ist. Gibt es so etwas wie:

sshd --accept-help-from lekensteyn

Ich suche keine Alternativen wie Teamviewer, nur eine Shell wie SSH. Es sollte auch Open Source sein.

Lekensteyn
quelle

Antworten:

13

Wenn Ihr eigener Computer SSH-Verbindungen akzeptieren kann, gibt es eine Möglichkeit, die von Pavlos G. verwendete Technik ohne einen zusätzlichen Computer zu verwenden.

Sie benötigen zunächst einen unterprivilegierten * Benutzer, mit dem sich Ihr Freund verbindet:

sudo adduser reverse --shell /bin/false

Sagen Sie Ihrem Freund, er soll den Tunnel starten:

ssh -N -R 62222:localhost:22 reverse@lekensteyns-server

lekensteyns-serverStarten Sie dann auf Ihrem eigenen Computer ( ) die umgekehrte Verbindung:

ssh -p 62222 localhost

* Ich weiß nicht genug über Sicherheit, um einen geeigneten Benutzer mit unzureichenden Rechten erstellen zu können. Das ist wahrscheinlich etwas, das in einer separaten Frage behandelt werden sollte.

ændrük
quelle
3
Sieht vielversprechend aus, ich habe eine neue Frage zu diesem eingeschränkten Benutzerteil gestellt
Lekensteyn,
2

Basierend auf Ihren spezifischen Bedürfnissen würde ich wahrscheinlich:

  1. Bitten Sie sie, mir das Passwort des Routers mitzuteilen
  2. Anmeldung und Einrichtung der Portweiterleitung nur für Port 22
  3. Stellen Sie eine Verbindung über SSH (oder SSH-Tunneling, wenn zusätzliche Ports geöffnet werden müssen) her, und erledigen Sie die Aufgabe.

Ich habe auch vergessen, dass Sie den umgekehrten SSH-Tunnel ausprobieren können , obwohl diese Lösung technisch einen weiteren - Mittelcomputer - benötigt, um zu funktionieren.

Weitere Infos finden Sie hier

Pavlos G.
quelle
1) wird wahrscheinlich nicht funktionieren, da der Zugang zum Router häufig für die Öffentlichkeit verboten ist.
Lekensteyn,
2

Normalerweise richte ich einen IPv6-Tunnel ein (von sixxs.net oder he.net), wenn sie noch kein IPv6 haben. Auf diese Weise hat der Computer eine statische Adresse und ich muss mich nicht mit NAT anlegen. Ich richte auch gerne eine schlüsselbasierte Authentifizierung ein (dann müssen sie dir nicht ihr Passwort mitteilen).

Sixxs hat einen eigenen Client, den Sie verwenden. Es funktioniert hinter fast jedem NAT und wird automatisch aktualisiert, wenn sich die IPv4-Adresse ändert. Sie haben Anweisungen zum Einrichten und es ist für Ubuntu gepackt.

Hurricane Electric verwendet einen Tunnel, in dem IPv6-Pakete als Nutzdaten eines IPv4-Pakets gesendet werden. Im Gegensatz zu Sixxs wird kein TCP / UDP verwendet. Dies bedeutet, dass das NAT, hinter dem Sie sich befinden, das Weiterleitungs-PROTOKOLL 41 (nicht den Port) unterstützen muss und nur ein Computer hinter dem NAT es verwenden kann. Die Software zur Verwendung eines solchen Tunnels ist in Ubuntu integriert.

Für HE verwende ich so etwas in /etc/network/interfaces:

auto he-ipv6
iface he-ipv6 inet6 v4tunnel
     endpoint 216.218.226.238
     address  2001:470:a29f::2
     netmask  64
     ttl 64
     up ip -6 route add default dev he-ipv6
     down ip -6 route del default dev he-ipv6

Das andere, was Sie tun müssen, ist, Ihren Tunnelendpunkt zu aktualisieren. Da Sie nicht wissen, wann sich die externe IP ändert, müssen Sie nur versuchen, den Endpunkt alle paar Minuten zu aktualisieren. Sie könnten so etwas verwenden und es von cron ausführen:

#!/bin/sh
echo -n "Hurricane Electric Proto-41 tunnel endpoint update: "
#(C) 2010 Erik B. Andersen This script is licensed under the latest version of the
# AGPL published by the Free Software Foundation at http://www.gnu.org/licenses/ .
####Set these for each different site#########
pass="passwordhere"
user_id="a765b8e2f474667dcb56e08c5f1aa05b"
tunnel_id="97817"
####Past here doesn't need to be changed######
wget -4 "https://ipv4.tunnelbroker.net/ipv4_end.php?ipv4b=AUTO&pass=$(echo -n "${pass}" | md5sum | grep -o -E "[0-9a-fA-F]{32}")&user_id=${user_id}&tunnel_id=${tunnel_id}" -O /dev/null -o /dev/null --no-check-certificate
echo " Done"
Azendale
quelle
1
Welche Anstrengungen müssen unternommen werden, um einen solchen Tunnel korrekt einzurichten? Diese Verbindung ist natürlich schlüsselbasiert, deshalb benutze ich ssh-import-id
Lekensteyn
In der Tat würde ich gerne mehr über diesen Trick erfahren.
Rafał Cieślak
0

Im Laufe der Jahre habe ich eine grafische Benutzeroberfläche entwickelt, die genau die Anforderungen des OP erfüllt. Allerdings ist ein SSH-Zugriff auf einen dritten Server mit öffentlicher IP-Adresse erforderlich, wie von Pavlos vorgeschlagen. Hier finden Sie die Debian-Pakete und die Anleitung:

http://pietrobattiston.it/reachme

Beachten Sie, dass es (noch) nicht in der Lage ist, sich um die Erstkonfiguration zu kümmern - Sie müssen sich nämlich die RSA-Schlüssel für die passwortlose Verbindung einrichten. Einmal eingerichtet, können Sie mit "reachthem" sehen, ob "reachme" verbunden ist, und eine ssh-Shell öffnen, das Dateisystem durchsuchen und den Bildschirm anzeigen (experimentell).

Natürlich brauchen Sie keinen dritten Computer, wenn Ihr Computer selbst eine öffentliche IP-Adresse hat, wie in der Antwort von ændrük. Der Vorteil der grafischen Benutzeroberfläche besteht natürlich darin, dass der Remote-Benutzer keinen Befehl in ein Terminal eingeben muss. Ein Teil dieses Vorteils geht jedoch verloren, wenn der Remote-Benutzer reachme installieren muss. Deshalb installiere und richte ich reachme immer für alle ein, auf denen ich Ubuntu installiere.

Pietro Battiston
quelle