“会话”与“通道”(JSch 和 sshd)
Posted
技术标签:
【中文标题】“会话”与“通道”(JSch 和 sshd)【英文标题】:"Session" vs "Channel" (JSch and sshd) 【发布时间】:2012-04-02 06:39:16 【问题描述】:我希望使用 JSch 将小文件(在未知时间和未知数量)从一台服务器移动到另一台服务器 - 不幸的是,我试图为每次传输打开一个会话,这很快就被炸毁了(我猜是 MaxSessions 10?)。
然后我用 JSch 打开了一个会话(每个主机),并为每个操作创建了一个通道(单个发送将创建一个通道,放置文件,关闭通道),但我遇到了同样的事情(尝试时一次做 10 个或更多,我会被拒绝连接,因为当另一个请求通过时某些通道仍在关闭)。
所以我查看了 sshd_config 并发现他们有一个 MaxSessions 属性,这在这里非常有用 - 但它让我想知道,是否没有 MaxChannelsPerSession 属性,或者我对 JSch 是什么感到困惑调用“通道”,什么是实际的 SSH 通道。
我正在使用截至 20120316 的最新版本的 JSch。
(最重要的是,我应该将它发布在网站上的不同位置吗?它是某种编程相关的,但我想也是系统管理员的一部分......)
【问题讨论】:
【参考方案1】:我是JSch的作者。
sshd_config 上的“MaxSessions”属性将在 OpenSSH 的 sshd 上被识别为“MaxChannelsPerSession”。
【讨论】:
稍微跟进:会话/通道线程安全吗?我可以创建一个全局保存的会话(或传递的引用),然后在不同的线程中创建通道而不用担心,还是应该把它全部放在一个同步块中? @ymnk 你能看看这个吗:***.com/questions/23692643/…【参考方案2】:只是另一种选择:
对于传输文件,JSch 提供了ChannelSftp 类。有了它,您可以只使用一个通道(对于每个服务器)一个接一个地(甚至并行地)传输多个文件。
不过,我不知道这是否会带来任何性能优势。
【讨论】:
你见过使用单个 ChannelSftp 实例并行传输文件的例子吗?我一直在努力挖掘一个。 不,我对 ChannelSftp 的了解主要是理论上的,通过阅读其代码和 SFTP pre-RFC。 离题了,但是Apache Mina SSHD
的客户有对应的吗?我使用这个而不是JSCH
,我的应用程序将从可重用的通道中受益。目前,我正在为每个开销巨大的文件连接和断开连接。
@Sridhar-Sarnobat 我从来没有使用过,但是从查看文档来看,我会说DefaultSftpClient 代表来自客户端的 SFTP 通道,其用于传输的读/写方法可以可以多次使用。
啊,我明白了。我想我现有的代码已经优化过了(尽管我可能需要避免在所有级别(会话、ssh 客户端、sftp 客户端)调用停止或关闭。谢谢。以上是关于“会话”与“通道”(JSch 和 sshd)的主要内容,如果未能解决你的问题,请参考以下文章