使用一个通道处理多个命令、回复和交互命令?
我刚开始学习使用 twisted.conch 来通过 SSH 自动化一些任务。
我尝试修改了 sshclient.py
的示例代码,链接在这里:http://www.devshed.com/c/a/Python/SSH-with-Twisted/4/。这个示例在登录后运行一条命令,并打印出捕获的输出。
我想要做的是运行一系列命令,可能还想根据输出决定接下来该做什么。
我遇到的问题是,twisted.conch.ssh.channel.SSHChannel 似乎在运行完命令(比如 df -h)后总是会自己关闭。这个示例在 channelOpen 后会 sendRequest。但无论我怎么做,通道在 dataReceived 后总是关闭。
我在想,这是不是因为服务器在命令执行完后发送了一个 EOF(文件结束符),所以这个通道必须关闭?我是不是应该为多个命令打开多个通道呢?
还有一个问题是那些交互式命令(比如 rm -i somefile)。似乎因为服务器没有发送 EOF,SSHChannel.dataReceived 从来没有被调用。我该如何在这种情况下捕获输出,并且如何发送回响应呢?
1 个回答
2
我是不是应该为多个命令打开多个通道?
没错,这就是SSH的工作方式。
SSHChannel.dataReceived从来没有被调用
这听起来不像正常情况。也许你可以提供一个简单的例子,能重现这个问题。