Když budu NATed, chtěl bych nakrátko přijmout připojení pro vývoj, a tak se pokouším udělat toto:
$ ssh [email protected] -R 80:localhost:80
Což selhává, protože se snažím svázat port, který je příliš nízký:
Warning: remote port forwarding failed for listen port 80
Takže jsem zjistil, že mohu provést setcap 'cap_net_bind_service=+ep' /my/application
abych mu umožnil naslouchat portům nižším než 1024. Takže v crontab suders mám toto:
@reboot setcap 'cap_net_bind_service=+ep' /usr/sbin/sshd
Ale stále mi to nedovoluje navázat se na port 80. Co dělám špatně? Jen budu místo toho používat nginx k proxy na 8080 nebo iptables nebo tak něco, ale stále mě zajímá, proč to, o co jsem se snažil, nefungovalo.
Přijatá odpověď:
OpenSSH se zcela odmítne vázat na privilegované porty, pokud ID přihlášeného uživatele není 0 (root). Příslušné řádky kódu jsou:
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.");
Zdroj:http://www.openssh.com/cgi-bin/cvsweb/src/usr.bin/ssh/serverloop.c?annotate=1.162 řádky 1092-1098
Pokud jste zvědaví, pw
je typu struct passwd *
a na linuxu je definován v /usr/include/pwd.h