答案1
因为 OpenSSH 尚未决定实现这一点。也许是时候提出功能请求了。不过,不确定它如何使端口号可供其他程序访问……也许写入某个文件?
但是,只需编写一些代码,您就可以轻松完成此操作。
伪代码:
- 选择随机数[1000-65535]:
export LOCAL=$(( $RANDOM + 1000 ))
(够好了) - 尝试连接
ssh some.host -L $LOCAL:dest.host:1234
- 如果失败,则重复。
- 用于
$LOCAL
获取所使用的随机端口。
不幸的是,这在 bash 中很难很好地实现,否则我会在这里给出一个更完整的例子。
答案2
SSH 将绑定到 L 指定的端口并在其上侦听任意客户端发起的连接(以及已经建立的连接上的数据包,将它们转发到远程服务器,但这与这个问题的上下文无关)。
为了发起连接,客户端必须指定服务器监听此类请求的端口号。如果随意选择此类端口,则客户端不知道该端口,因此无法发起连接。
因为-R
这不是问题,因为远程服务器不会接受该端口上除本地服务器(从参数中知道端口号-R
)之外的任何连接。
建立初始连接之后,客户端和服务器都可以针对实际流量协商(从而了解)额外的动态分配端口。