我知道远程端口转发可以动态分配端口。
ssh remote -R 0:10.19.24.19:5555
但不幸的是,远程服务器iptables
禁止大范围的端口。
无论如何,ssh 是否可以在本地动态分配端口。就像是
ssh remote -L 0:10.19.24.19:5555
但上面的命令总是抛出错误。
编辑于2023年2月3日
情况是这样的。我正在开发一个工具,它能够管理多个端口转发。不幸的是,出于安全原因,远程服务器只有一小部分可用端口。服务器管理员不会允许放松限制。所以我希望我可以动态分配本地端口进行转发。
由于本地转发不支持随机端口分配,我决定使用shell函数来生成随机端口号。并用于ss
测试转发是否成功。
_next_port() {
local lower_port upper_port
read lower_port upper_port </proc/sys/net/ipv4/ip_local_port_range
while true; do
local port=$(shuf -i $lower_port-$upper_port -n 1)
if [[ $(ss -tulpH "sport == $port") == "" ]]; then
echo $port
fi
done
}
案件结束?
答案1
您似乎误解了ssh
端口转发功能。本地/远程端口通过 ssh 通道进行传输,与防火墙控制关系不大。
使用您的第一个示例,此命令在 上创建一个随机分配的侦听端口remoteHost
。当进程remoteHost
连接到它时,流量就会被路由通过本地客户端的 ssh 传输到系统上的端口 5555 10.19.24.19
:
ssh -R 0:10.19.24.19:5555 remoteHost
请注意,remoteHost
不需要直接网络访问10.19.24.19
- 这就是远程转发功能的要点。
因此,iptables
无法控制通过此端口的访问,并且系统管理员施加的限制(您所描述的限制开放可用端口的数量)没有任何影响。
ssh
我认为,如果您定义远程端口号而不是随机选择一个端口号,那会容易得多。但是,如果您决定动态定义它,那么 StackExchange 上的其他答案(例如我的此处),保存SSH隧道动态分配的端口,可能有帮助。