setcapを使用してポート80のリモートポートをローカルホストに転送するにはどうすればよいですか?

setcapを使用してポート80のリモートポートをローカルホストに転送するにはどうすればよいですか?

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より低いポートでリッスンできることがわかりました。だから私はsuders crontabでこれを得ました:

@reboot setcap 'cap_net_bind_service=+ep' /usr/sbin/sshd

しかし、まだポート80をバインドすることは許可されていません。私は何が間違っていましたか?私はnginxを使って8080やiptablesなどをプロキシするつもりですが、なぜ私がやろうとしているのがうまくいかないのか疑問に思います。

ベストアンサー1

@dwurfで説明したように受け入れられた回答ssh1024未満のポートのみがユーザーにバインドされますroot

socatそれ以外の場合、これは優れたユースケースですroot

まず、8080リモートシステムのポート(または他の許可されたポート)にリモートで転送します。

ssh [email protected] -R 8080:localhost:80

その後、リモートシステムはポートを80ポートにマッピングします8080

sudo socat TCP-LISTEN:80,fork TCP:localhost:8080

メモ:

Dirk Hoffmanの提案に従って、これら2つのコマンドを1行にまとめることができます。

ssh -t [email protected] -R 8080:localhost:80 sudo socat TCP-LISTEN:80,fork TCP:localhost:8080

(パスワード-t入力に対話型端末が必要な場合はsudo必須です。)

おすすめ記事