【问题标题】:"Session" vs "Channel" (JSch and sshd)“会话”与“通道”(JSch 和 sshd)
【发布时间】:2012-04-02 06:39:16
【问题描述】:

我希望使用 JSch 将小文件(在未知时间和未知数量)从一台服务器移动到另一台服务器 - 不幸的是,我试图为每次传输打开一个会话,这很快就被炸毁了(我猜是 MaxSessions 10?)。

然后我用 JSch 打开了一个会话(每个主机),并为每个操作创建了一个通道(单个发送将创建一个通道,放置文件,关闭通道),但我遇到了同样的事情(尝试时一次做 10 个或更多,我会被拒绝连接,因为当另一个请求通过时某些通道仍在关闭)。

所以我查看了 sshd_config 并发现他们有一个 MaxSessions 属性,这在这里非常有用 - 但它让我想知道,是否没有 MaxChannelsPerSession 属性,或者我对 JSch 是什么感到困惑调用“通道”,什么是实际的 SSH 通道。

我正在使用截至 20120316 的最新版本的 JSch。

(最重要的是,我应该将它发布在网站上的不同位置吗?它是某种编程相关的,但我想也是系统管理员的一部分......)

【问题讨论】:

    标签: ssh jsch sshd


    【解决方案1】:

    我是JSch的作者。

    sshd_config 上的“MaxSessions”属性将在 OpenSSH 的 sshd 上被识别为“MaxChannelsPerSession”。

    【讨论】:

    • 稍微跟进:会话/通道线程安全吗?我可以创建一个全局保存的会话(或传递的引用),然后在不同的线程中创建通道而不用担心,还是应该把它全部放在一个同步块中?
    • @ymnk 你能看看这个吗:stackoverflow.com/questions/23692643/…
    【解决方案2】:

    只是另一种选择:

    对于传输文件,JSch 提供了ChannelSftp 类。有了它,您可以只使用一个通道(对于每个服务器)一个接一个地(甚至并行地)传输多个文件。

    不过,我不知道这是否会带来任何性能优势。

    【讨论】:

    • 你见过使用单个 ChannelSftp 实例并行传输文件的例子吗?我一直在努力挖掘一个。
    • 不,我对 ChannelSftp 的了解主要是理论上的,通过阅读其代码和 SFTP pre-RFC。
    • 离题了,但是Apache Mina SSHD 的客户有对应的吗?我使用这个而不是JSCH,我的应用程序将从可重用的通道中受益。目前,我正在为每个开销巨大的文件连接和断开连接。
    • @Sridhar-Sarnobat 我从来没有使用过,但是从查看文档来看,我会说DefaultSftpClient 代表来自客户端的 SFTP 通道,其用于传输的读/写方法可以可以多次使用。
    • 啊,我明白了。我想我现有的代码已经优化过了(尽管我可能需要避免在所有级别(会话、ssh 客户端、sftp 客户端)调用停止或关闭。谢谢。
    猜你喜欢
    • 2013-06-20
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-10-14
    • 2014-07-04
    • 2014-10-20
    • 2012-05-20
    • 2016-12-10
    相关资源
    最近更新 更多