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

标签 java ssh jsch

谁能告诉我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/

相关文章:

java - 使用 JSch 通过按钮发送命令

java - 仅具有静态成员的类是不可变的吗?

java - 为什么 JVM 中没有用于寻找 JIT 编译器的基础设施?

amazon-web-services - 通过 SSH 连接到 EC2 Spot 实例

java - JSch 库 Kerberos 支持

java - 如何将注册表中的 putty 已知主机条目转换为 Jsch 可读的已知主机文件

Java GroupWise 邮件客户端

java - Bengli 文本上的 iText7 排版 IndexOutOfBoundsException

python - 如何使用ssh执行远程脚本

Bash - 如何将参数传递给通过重定向标准输入读取的脚本