Wenn ich NATed bin, würde ich gerne kurz Verbindungen zur Entwicklung annehmen, und deshalb versuche ich Folgendes:
$ ssh [email protected] -R 80:localhost:80
Was fehlschlägt, da ich versuche, einen Port zu binden, der zu niedrig ist:
Warning: remote port forwarding failed for listen port 80
Also habe ich entdeckt, dass ich setcap 'cap_net_bind_service=+ep' /my/application
ausführen kann damit es Ports unter 1024 abhören kann. 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 einfach nginx als Proxy für 8080 oder iptables oder so verwenden, aber ich bin immer noch neugierig, warum das, was ich versucht habe, nicht funktioniert hat.
Akzeptierte Antwort:
OpenSSH weigert sich rundweg, sich an privilegierte Ports zu binden, es sei denn, die Benutzer-ID des angemeldeten Benutzers ist 0 (Root). Die relevanten Codezeilen sind:
if (!options.allow_tcp_forwarding ||
no_port_forwarding_flag ||
(!want_reply && listen_port == 0) ||
(listen_port != 0 && listen_port < IPPORT_RESERVED &&
pw->pw_uid != 0)) {
success = 0;
packet_send_debug("Server has disabled port forwarding.");
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 Typ struct passwd *
und unter Linux ist in /usr/include/pwd.h
definiert