Saya ingin menerima koneksi secara singkat untuk pengembangan saat saya NATed, jadi saya mencoba melakukan ini:
$ ssh [email protected] -R 80:localhost:80
Yang gagal saat saya mencoba mengikat port yang terlalu rendah:
Warning: remote port forwarding failed for listen port 80
Jadi saya menemukan bahwa saya dapat melakukan setcap 'cap_net_bind_service=+ep' /my/application
untuk mengizinkannya mendengarkan port yang lebih rendah dari 1024. Jadi saya punya ini di crontab suders saya:
@reboot setcap 'cap_net_bind_service=+ep' /usr/sbin/sshd
Tapi itu masih tidak membiarkan saya mengikat pada port 80. Apa yang saya lakukan salah? Saya hanya akan menggunakan nginx untuk melakukan proxy ke 8080 atau iptables atau sesuatu sebagai gantinya, tetapi saya masih penasaran mengapa apa yang saya coba lakukan tidak berhasil.
Jawaban yang Diterima:
OpenSSH akan menolak mentah-mentah untuk mengikat ke port yang diistimewakan kecuali id pengguna dari pengguna yang masuk adalah 0 (root). Baris kode yang relevan adalah:
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.");
Sumber:http://www.openssh.com/cgi-bin/cvsweb/src/usr.bin/ssh/serverloop.c?annotate=1.162 lines 1092-1098
Jika Anda penasaran, pw
bertipe struct passwd *
dan di linux didefinisikan dalam /usr/include/pwd.h