单个 SSH 会话中的多个通道

Multiple channels in a single SSH session

我正在调试 OpenSSH 代码,似乎在单个 SSH 会话(单个连接的子服务器)上分配了多个通道。

我的查询在这里可能很幼稚:

  1. Under what conditions can multiple channels be opened?

  2. What are the SSH message flows which lead to multiple channels? A message flow chart will be very helpful.

  3. Is it correct to free channels[0] in the case below?

(gdb) p channels[0]
 = (Channel *) 0xb0f33e20
(gdb) p channels[0]->rfd
 = 0xd
(gdb) p channels[0]->efd
 = 0xffffffff
(gdb) p channels[0]->wfd
 = 0xffffffff
(gdb) p channels[1]->wfd
 = 0x9
(gdb) p channels[1]->efd
 = 0xffffffff
(gdb) p channels[1]->rfd
 = 0x9

Under what conditions can multiple channels be opened?

每个通道都是 X11 转发、TCP 端口转发(可能有更多类型)、UNIX 域套接字转发(或 ssh-agent 套接字)或 MUX 代理。咨询 source code 描述类型是一个好的开始。如果客户端使用 command-line 选项(-X-L-R-D-A、... ) 在 ssh.

的手册页中进行了描述

What are the SSH message flows which lead to multiple channels? A message flow chart will be very helpful.

如果您将 运行 OpenSSH 客户端 and/or 服务器处于调试模式 (LogLevel DEBUG3),您将获得很多有用的信息,对于各种用例正在交换哪些消息.

Is it correct to free channels[0] in the case below?

很可能不是,但不清楚你在这里问的是什么以及上下文是什么。这显然是有效的通道,读取文件描述符指向 FD 0x0D,因此您可能期望在某个时候会有一些东西要读取。