NATを使用しているときに、開発のために接続を簡単に受け入れたいので、これを実行しようとしています:
$ ssh [email protected] -R 80:localhost:80
低いポートをバインドしようとしているため、これは失敗します:
Warning: remote port forwarding failed for listen port 80
そのため、setcap 'cap_net_bind_service=+ep' /my/application
を実行できることがわかりました。 1024未満のポートをリッスンできるようにします。したがって、これはsuderscrontabにあります。
@reboot setcap 'cap_net_bind_service=+ep' /usr/sbin/sshd
しかし、それでもポート80にバインドできません。何が間違っているのでしょうか。代わりにnginxを使用して8080やiptablesなどにプロキシしますが、それでも、自分がやろうとしていたことがうまくいかなかった理由に興味があります。
承認された回答:
ログインしたユーザーのユーザーIDが0(ルート)でない限り、OpenSSHは特権ポートへのバインドを完全に拒否します。関連するコード行は次のとおりです。
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.");
出典:http://www.openssh.com/cgi-bin/cvsweb/src/usr.bin/ssh/serverloop.c?annotate=1.162行1092-1098
興味がある場合は、pw
タイプはstruct passwd *
Linuxでは/usr/include/pwd.h
で定義されています