我正在调试OpenSSH代码,似乎在单个SSH session (单个连接的子服务器)上分配了多个通道。
我的查询在这里可能很幼稚:
(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
最佳答案
每个通道都是X11转发,TCP端口转发(可能有更多类型),UNIX域套接字转发(或ssh-agent
套接字)或MUX代理。咨询source code描述类型是一个好的开始。如果客户端使用命令行选项(-X
,-L
,-R
,-D
,-A
,...)请求它们,这些文件将被打开,这些选项在ssh
的手册页中进行了介绍。
如果您将以 Debug模式(LogLevel DEBUG3
)运行OpenSSH客户端和/或服务器,您将获得许多有用的信息,即在各种使用情况下正在交换什么消息。
可能不是,但不清楚您在这里问什么以及背景是什么。显然,这是有效的通道,其读取文件描述符指向FD 0x0D
,因此您可能希望在某些时候读取某些内容。
关于ssh - 单个SSH session 中的多个 channel ,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/42331445/