【问题标题】:Using a channel for multiple commands, replys, and interactive commands?为多个命令、回复和交互式命令使用通道?
【发布时间】:2010-11-30 14:43:34
【问题描述】:

我开始学习 twisted.conch 通过 SSH 自动执行一些任务。

I tried to modify 来自http://www.devshed.com/c/a/Python/SSH-with-Twisted/4/ 的示例 sshclient.py。它在登录后运行 1 个命令并打印捕获的输出。

What I wanted to do 是运行一系列命令,可能会根据输出决定做什么。

The problem I ran intotwisted.conch.ssh.channel.SSHChannel 似乎总是在运行命令(例如 df -h)后自行关闭。该示例将在 channelOpen 之后sendRequest。然后无论我做什么,在 dataReceived 之后通道总是关闭。

我想知道这是否是由于服务器在命令之后发送了 EOF。因此必须关闭此通道?我应该为多个命令打开多个通道吗?

Another problem is那些交互式命令(例如rm -i somefile)。似乎因为服务器没有发送 EOF,所以 SSHChannel.dataReceived 永远不会被调用。在这种情况下,我如何设法捕获输出,以及如何发回响应?

【问题讨论】:

  • 我想澄清一下,“运行一系列命令”类似于 expect 命令

标签: python ssh twisted


【解决方案1】:

我应该为多个命令打开多个通道吗?

是的。这就是 SSH 的工作原理。

SSHChannel.dataReceived 永远不会被调用

这听起来不像应该发生的事情。也许您可以包含一个重现该行为的最小示例。

【讨论】:

  • 感谢您的回答。要重现该行为,您只需使用来自devshed.com/c/a/Python/SSH-with-Twisted/4 的代码并运行 rm -i somefile 命令。 dataReceived 应该打印收到的任何内容,我什么也没看到。
  • 啊。这是因为rm -i somefile 将其提示写入标准错误。这些字节不会传递给dataReceived 回调,而是传递给extReceived 回调。启用 Twisted 日志记录 (twisted.python.log.startLogging) 将导致 SSH 客户端转储有关正在发生的事情的大量额外信息,并可能帮助您跟踪其他类似问题。
  • 是的。这是extReceived 回调。感谢您的日志记录提示。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2017-09-06
  • 2016-05-22
  • 1970-01-01
  • 2021-09-16
  • 1970-01-01
  • 2012-03-12
  • 1970-01-01
相关资源
最近更新 更多