当我是NATed时,我想简单地接受用于开发的连接,所以我尝试这样做:
$ ssh ubuntu@example.org -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之类的东西,但是我仍然很好奇为什么我想要做的事情不起作用。
发布于 2012-07-30 12:41:56
除非登录用户的用户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定义的
发布于 2013-12-05 10:14:02
我遇到了类似的问题,所以我的解决方案是将DNAT规则添加到nat表的OUTPUT链中:
iptables -t nat -A OUTPUT -d 127.0.0.0/8 -p tcp --dport 80 \
-j DNAT --to-destination :8080对于所有本地生成的tcp数据包,此规则有效地将目标端口80替换为8080。
如果您也希望转发任何传入连接,那么在PREROUTING nat链中添加一个额外的规则:
iptables -t nat -A PREROUTING -d 10.0.0.200 -p tcp --dport 80 \
-j REDIRECT --to-port 8080其中,10.0.0.200是应该将传入连接转发到web服务的接口的IP地址。
发布于 2019-02-06 20:54:43
从客户端,您可以通过sudo运行ssh:
sudo ssh -L 80:127.0.0.1:80 myuser@myhost.com虽然我不能肯定这对您本地系统的安全影响,但它还是有效的。
https://unix.stackexchange.com/questions/41451
复制相似问题