Ich möchte Verbindungen für die Entwicklung kurz akzeptieren, wenn ich NATed bin, und deshalb versuche ich Folgendes:
$ ssh [email protected] -R 80:localhost:80
Was fehlschlägt, wenn ich versuche, einen zu niedrigen Port zu binden:
Warning: remote port forwarding failed for listen port 80
Also habe ich herausgefunden, dass ich es tun kann setcap 'cap_net_bind_service=+ep' /my/application
, damit es Ports abhören kann, die niedriger als 1024 sind. Also habe ich das in meiner suders crontab:
@reboot setcap 'cap_net_bind_service=+ep' /usr/sbin/sshd
Aber es lässt mich immer noch nicht an Port 80 binden. Was mache ich falsch? Ich werde stattdessen nur Nginx als Proxy für 8080 oder Iptables oder ähnliches verwenden, aber ich bin immer noch neugierig, warum das, was ich versucht habe, nicht funktioniert hat.
ubuntu
ssh-tunneling
setcap
Kit Sunde
quelle
quelle
sudo
. Zum Beispiel, wie man es nicht kann,apt-get install foo
ohne es vorher zu tunsudo
.sudo
. Es ist ein Benutzer, der über alle Berechtigungen verfügt, die ein normaler Benutzer nur erhält, wenn er dies tutsudo
. root wird manchmal auch als Superuser bezeichnet. Im Grunde war meine Frage an Sie: Sie scheinen in der Lage zu sein,sudo
auf der Box zu tun , warum können Sie in diesem Fall nicht?Antworten:
OpenSSH lehnt die Bindung an privilegierte Ports ab, es sei denn, die Benutzer-ID des angemeldeten Benutzers lautet 0 (root). Die relevanten Codezeilen sind:
Quelle: http://www.openssh.com/cgi-bin/cvsweb/src/usr.bin/ssh/serverloop.c?annotate=1.162 Zeilen 1092-1098
Wenn Sie neugierig sind,
pw
ist vom Typstruct passwd *
und unter Linux ist in definiert/usr/include/pwd.h
quelle
Ich stoße auf ein ähnliches Problem, daher bestand die Lösung
DNAT
darinOUTPUT
, dernat
Tabellenkette eine Regel hinzuzufügen :Diese Regel ersetzt effektiv den Zielport 80 durch 8080 für alle lokal erzeugten TCP-Pakete.
Wenn Sie auch die Weiterleitung eingehender Verbindungen zulassen möchten, fügen Sie der
PREROUTING
nat
Kette eine zusätzliche Regel hinzu :Wo
10.0.0.200
ist die IP-Adresse der Schnittstelle, die eingehende Verbindungen an Ihren Webdienst weiterleiten soll?quelle
Auf Client-Seite können Sie ssh über sudo ausführen:
Es funktioniert, obwohl ich zugegebenermaßen nicht sicher bin, welche Auswirkungen die Sicherheit auf Ihr lokales System hat.
quelle
Dies ist ein großartiger Anwendungsfall für
socat
.Führen Sie zunächst eine Remote-Weiterleitung an den Port
8080
(oder einen anderen zulässigen Port) des Remote-Computers durch:Ordnen Sie dann auf dem Remote-Computer Port
80
zu Port zu8080
:Anmerkungen:
Wie von Dirk Hoffman vorgeschlagen, können diese beiden Befehle in einer einzigen Zeile kombiniert werden:
(Dies
-t
ist erforderlich, wenn Sie ein interaktives Terminal benötigen, um Ihrsudo
Passwort einzugeben .)quelle
Sie können Ihren öffentlichen Schlüssel auch einfach zur Liste /root/.ssh/authorized_keys hinzufügen. Wenn Sie paranoid sind, sollten Sie das Ausführen von Befehlen als root wie folgt verbieten:
Beachten Sie, dass für die Anmeldung als root möglicherweise "PermitRootLogin ohne Kennwort" in / etc / ssh / sshd_config hinzugefügt werden muss.
quelle
Ausarbeitung des Lösungsvorschlags von Ben Mares oben,
unten ist ein Einzeiler, der:
öffnet zwei Remote-Ports vorwärts:
1. Remote-Port 8888 zum lokalen Port 80
2. Remote-Port 8443 zum lokalen Port 443
Auf dem Remotecomputer verbindet socat alles, was
an Port 80 ankommt, um an Port 8888 gestreamt zu werden,
der dann an den lokalen Host-Port 80 getunnelt wird.
2. an Port 443 ankommt, um an Port 8443 gestreamt zu werden,
der dann an lokalen Host-Port 443 getunnelt wird
Wenn Sie den Befehl ausführen, müssen Sie Ihr Root-Passwort des Remotecomputers angeben (um an den Ports 80/443 auflisten zu können) und dann (solange der Tunnel eingerichtet ist) alles, was an Port 80 oder 443 ankommt des Remote-Hosts wird zu Ihren lokalen Computer-Ports 80 bzw. 443 getunnelt ...
merken!!
Um an alle Netzwerkschnittstellen (0.0.0.0) binden zu können, müssen Sie Ihre Remote-Computer bearbeiten
/etc/ssh/sshd_config
undGatewayPorts clientspecified
oder einstellenGatewayPorts yes
Sie können dies auf dem Remote-Computer überprüfen, mit dem Folgendes angezeigt werden
netstat -tlpn | grep -E '8888|8443'
soll:und nicht
quelle