我正在调试OpenSSH代码,似乎在单个SSH会话(单个连接的子服务器)上分配了多个通道。
我的疑问在这里很天真:
在什么条件下可以打开多个频道?
哪些SSH消息流导致多个通道?消息流程图将非常有用。
- 醇>
以下情况下的免费频道[0]是否正确?
(gdb) p channels[0]
$1 = (Channel *) 0xb0f33e20
(gdb) p channels[0]->rfd
$2 = 0xd
(gdb) p channels[0]->efd
$3 = 0xffffffff
(gdb) p channels[0]->wfd
$4 = 0xffffffff
(gdb) p channels[1]->wfd
$5 = 0x9
(gdb) p channels[1]->efd
$6 = 0xffffffff
(gdb) p channels[1]->rfd
$7 = 0x9
答案 0 :(得分:1)
在什么条件下可以打开多个频道?
每个频道都是X11转发,TCP端口转发(可能有更多类型),UNIX域套接字转发(或ssh-agent
套接字)或MUX代理。咨询source code描述类型是一个良好的开端。如果客户端使用命令行选项(-X
,-L
,-R
,-D
,-A
,...)请求它们,则会打开它们在ssh
。
哪些SSH消息流导致多个通道?消息流程图非常有用。
如果您将以调试模式(LogLevel DEBUG3
)运行OpenSSH客户端和/或服务器,您将获得许多有用信息,以便为各种用例交换消息。
以下情况下的免费频道[0]是否正确?
很可能不是,但目前尚不清楚你在这里问什么,背景是什么。这显然是有效的通道,读取文件描述符指向FD 0x0D
,因此您可能会期望在某些时候可以阅读。