gpt4 book ai didi

java - jsch ChannelExec 和 ChannelShell 之间的确切区别是什么?

转载 作者:塔克拉玛干 更新时间:2023-11-03 03:35:02 24 4
gpt4 key购买 nike

谁能告诉我ChannelExecChannelShell 之间的区别?

最佳答案

The shell and exec channels非常相似——两者都使用远程 shell 执行命令(至少,在概念上——当然,服务器可能被配置为以不同方式对待它们)。 RFC 4254 将它们分组在 section "Interactive Sessions" 中,它们都(以及子系统,见下文)在 SSH 协议(protocol)中使用 channel 类型“ session ”。

有一个重要区别:

  • ChannelShell ,输入流提供命令和这些命令的输入。这就像在您的本地计算机上使用交互式 shell。 (它通常仅用于此目的:交互式使用。)

  • ChannelExec ,命令在 connect() 之前用 setCommand() 给出,输入流将作为输入转发给这些命令。 (大多数情况下,您只有一个命令,但您可以使用普通的 shell 分隔符 &&&|||;、换行符和复合命令。)这就像在本地计算机上执行 shell 脚本。 (当然,如果其中一个命令本身是一个交互式 shell,它的行为将类似于 ChannelShell。)

  • 还有第三个类似的,ChannelSubsystem ,它执行 ssh 服务器的子系统 - 这里服务器的配置决定要做什么,而不是远程用户的 shell。 (最常用的子系统是 sftp,但为此 JSch 提供了一个专门的 channel ,它理解协议(protocol)。)

请注意,我在这里所说的“输入流”是 channel 中从本地到远程主机的数据流——这实际上可以通过将 Java InputStream 传递给 setInputStream 来完成方法,或者通过从 getOutputStream 方法获取 Java OutputStream 并写入它。

关于java - jsch ChannelExec 和 ChannelShell 之间的确切区别是什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6265278/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com