0

我在“持久”SSHConnection 上使用 SSHChannel。有时,以前关闭的 localChannel 会尝试使用并导致 KeyError,因为 localChannel 不在 SSHConnection.channels[] 中。

以下是一些日志片段:

2017-07-05 07:54:50-0500 [-] openChannel localChannelID=2
2017-07-05 07:54:50-0500 [-] opening channel 2 with 65536 32768
2017-07-05 07:54:50-0500 [SSHChannel session (2) on SSHService 'ssh-connection' on ClientTransport,client] sending close 2
2017-07-05 07:54:50-0500 [SSHService 'ssh-connection' on ClientTransport,client] channelClosed id=2

所以现在通道 2 已关闭。后来(在几个新频道之后),我看到了这个:

2017-07-05 08:54:55-0500 [-] openChannel localChannelID=2
2017-07-05 08:54:55-0500 [-] opening channel 2 with 65536 32768
2017-07-05 08:54:55-0500 [SSHService 'ssh-connection' on ClientTransport,client] Unhandled Error Traceback (most recent call last):
<snipped irrelevant>
File "/usr/local/lib/python2.7/dist-packages/twisted/conch/ssh/connection.py", line 180, in ssh_CHANNEL_OPEN_CONFIRMATION channel = self.channels[localChannel]
exceptions.KeyError: 2

请注意,我在连接上有计时器,但我在使用前重置了这些计时器。

我迷路了,无法确定为什么它“大部分时间”都有效,但随后随机失败。我该如何测试以防止它似乎打开而没有任何明显的错误。

4

1 回答 1

0

在与提供查看我的代码的扭曲家伙交谈后,我制作了一个最小的 single-file.py 应用程序来执行测试运行,并且从未遇到过问题。观察者改变了现实?

然后我意识到应用程序中有几个线程在很久以前就开始扭曲了。他们从未以任何其他方式表现自己。

我删除了 python 线程,现在它在没有通道问题的情况下运行。(作为旁注,我已经通过将延迟发送到可以重新启动通道打开并且它可以工作的点来克服通道问题,但我很高兴从代码中解决这个问题)

于 2017-07-07T16:54:19.310 回答