单个SSH会话中的多个通道

时间:2017-02-19 18:57:07

标签: ssh ssh-keys openssh ssh-tunnel

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

我的疑问在这里很天真:

  
      
  1. 在什么条件下可以打开多个频道?

  2.   
  3. 哪些SSH消息流导致多个通道?消息流程图将非常有用。

  4.   
  5. 以下情况下的免费频道[0]是否正确?

  6.   
(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

1 个答案:

答案 0 :(得分:1)

  

在什么条件下可以打开多个频道?

每个频道都是X11转发,TCP端口转发(可能有更多类型),UNIX域套接字转发(或ssh-agent套接字)或MUX代理。咨询source code描述类型是一个良好的开端。如果客户端使用命令行选项(-X-L-R-D-A,...)请求它们,则会打开它们在ssh

的手册页中进行了描述
  

哪些SSH消息流导致多个通道?消息流程图非常有用。

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

  

以下情况下的免费频道[0]是否正确?

很可能不是,但目前尚不清楚你在这里问什么,背景是什么。这显然是有效的通道,读取文件描述符指向FD 0x0D,因此您可能会期望在某些时候可以阅读。