有人可以告诉我ChannelExec&之间的区别ChannelShell吗?
Paŭ*_*ann 16
shell和exec通道非常相似 - 都使用远程shell执行命令(至少在概念上 - 服务器可能配置为以不同方式处理它们).RFC 4254将它们分组在"交互式会话"部分中,它们(以及子系统,见下文)在SSH协议中使用通道类型"会话".
有一个重要的区别:
因为ChannelShell,输入流提供这些命令的命令和输入.这就像在本地计算机上使用交互式shell一样.(它通常仅用于此:交互式使用.)
因为ChannelExec,命令是在之前使用setCommand()给出的,connect()输入流将作为输入发送到这些命令.(大多数情况下,你将有只有一个命令,但您可以提供使用正常的外壳分离多者&,&&,|,||,;,换行,复合命令).这就像执行shell脚本在本地计算机上.(当然,如果其中一个命令本身是一个交互式shell,这将表现得像ChannelShell.)
还有第三个类似的,ChannelSubsystem执行ssh服务器的子系统 - 这里服务器的配置决定做什么,而不是远程用户的shell.(最常用的子系统是sftp,但是对于这个JSch提供了一个专门的通道,它理解协议.)