有人可以告诉我之间的区别吗ChannelExec
& ChannelShell
?
shell 和 exec 通道 http://sourceforge.net/apps/mediawiki/jsch/index.php?title=Shell,_Exec_or_Subsystem_Channel非常相似 - 都使用远程 shell 执行命令(至少在概念上 - 当然,服务器可能配置为以不同方式对待它们)。 RFC 4254 将它们分组在“互动会议”部分 https://www.rfc-editor.org/rfc/rfc4254#section-6,并且它们(以及子系统,见下文)都使用 SSH 协议中的通道类型“会话”。
有一个重要的区别:
-
For ChannelShell http://epaul.github.com/jsch-documentation/simple.javadoc/index.html?com/jcraft/jsch/ChannelShell.html,输入流提供命令以及这些命令的输入。这就像使用交互式 shell在您的本地计算机上。 (它通常仅用于此目的:交互式使用。)
-
For ChannelExec http://epaul.github.com/jsch-documentation/simple.javadoc/index.html?com/jcraft/jsch/ChannelExec.html,命令之前用 setCommand() 给出connect()
,并且输入流将被转发到这些命令作为输入。 (大多数情况下,您只有一个命令,但您可以使用普通的 shell 分隔符提供多个命令&
, &&
, |
, ||
, ;
、换行符和复合命令。)这就像执行 shell 脚本在您的本地计算机上。 (当然,如果其中一个命令本身是一个交互式 shell,那么它的行为就像一个ChannelShell
.)
-
还有第三个类似的,ChannelSubsystem http://epaul.github.com/jsch-documentation/simple.javadoc/index.html?com/jcraft/jsch/ChannelSubsystem.html,它执行 ssh 服务器的子系统 - 这里服务器的配置决定要做什么,而不是远程用户的 shell。 (最常用的子系统是sftp
,但为此 JSch 提供了一个专门的通道,它可以理解该协议。)
请注意,我这里所说的“输入流”是从本地到远程主机的通道中的数据流——实际上可以通过将 Java InputStream 传递给setInputStream
方法,或者通过从getOutputStream
方法并写入它。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)