具有动态本地端口转发的 ssh

具有动态本地端口转发的 ssh

我知道远程端口转发可以动态分配端口。

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隧道动态分配的端口,可能有帮助。

相关内容