【问题标题】:Multiple channels in a single SSH session单个 SSH 会话中的多个通道
【发布时间】:2017-07-08 22:59:37
【问题描述】:

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

我的疑问在这里可能很幼稚:

  1. 什么情况下可以开通多个通道?

  2. 什么是通向多个通道的 SSH 消息流?消息流程图会很有帮助。

  3. 在以下情况下释放通道[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

【问题讨论】:

    标签: ssh ssh-keys openssh ssh-tunnel


    【解决方案1】:

    什么情况下可以开通多个渠道?

    每个通道要么是 X11 转发、TCP 端口转发(可能有更多类型)、UNIX 域套接字转发(或ssh-agent 套接字)或 MUX 代理。咨询source code 描述类型是一个好的开始。如果客户端使用命令行选项(-X-L-R-D-A、...)请求它们,它们将被打开,这些在 ssh 的手册页中进行了描述.

    什么是通向多个通道的 SSH 消息流?消息流程图会很有帮助。

    如果您将在调试模式 (LogLevel DEBUG3) 下运行 OpenSSH 客户端和/或服务器,您将获得很多有用的信息,哪些消息正在为各种用例交换。

    在下面的情况下释放频道[0]是否正确?

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

    【讨论】:

    • 通道也可以(通常是)是一个shell(或exec=command)。
    • @MartinPrikryl 是的。从用户的角度来看,它主要是这样感知的,但是通道代码没有任何外壳或命令的意义。它只是将数据从一种方式重定向到另一种方式。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2013-12-31
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-01-04
    • 2013-11-24
    • 1970-01-01
    相关资源
    最近更新 更多