通过读取源代码,它由
dynamic-tcpip
类型的通道处理。我不认为“dynamic-tcpip”是“真正的”通道类型。它是 ssh 客户端内部使用的标签,用于动态端口转发侦听端口。
动态和非动态端口转发都会为每个转发的客户端连接打开一个到远程服务器的“direct-tcpip”通道。打开 direct-tcpip 通道的请求包括通道应转发到的主机和端口。
对于非动态转发,主机和端口是在创建转发时指定的。当您运行
ssh -L 1234:somehost:5678...
时,远程主机和端口是“somehost”端口 5678。对于通过运行类似 ssh -D 1234
之类的内容创建的动态转发,客户端将连接到动态侦听端口并使用 SOCKS 协议发送它想要连接的主机和端口。无论哪种方式,ssh 客户端都会使用主机和端口来创建以主机和端口为目标的 direct-tcpip 通道。对于远程服务器来说,通道打开请求来自动态转发而不是其他东西并不重要。
您将看到客户端关于动态监听端口的消息中出现“dynamic-tcpip”:
$ ssh -vD 1234 localhost
...
debug1: Connection to port 1234 forwarding to socks port 0 requested.
debug1: channel 3: new [dynamic-tcpip]
~#
The following connections are open:
#2 client-session (t4 r0 i0/0 o0/0 e[write]/4 fd 11/12/13 sock -1 cc -1 io 0x01/0x01)
#3 dynamic-tcpip (t13 nr0 i0/0 o0/0 e[closed]/0 fd 14/14/-1 sock 14 cc -1 io 0x01/0x00)
在这里,连接到动态侦听端口会触发一条提及动态 tcpip 通道类型的调试消息,并且它还会通过键入“~#”显示在通道列表中。