Paramiko 从连接对象获取标准输出(不是 exec_command)

Paramiko get stdout from connection object (not exec_command)

我正在编写一个脚本,使用 paramiko 通过 ssh 连接到多个远程主机并 运行 进行一些检查。有些主机被设置为其他主机的故障转移,在尝试连接之前我无法确定正在使用的主机。连接到这些 'inactive' 主机之一后,主机会通知我您需要连接到另一个 'active' IP,然后在 n 秒后关闭连接。这似乎被写入 SSH connection/session 的标准输出(即它不是 SSH 横幅)。

我已经用了很多 paramiko,但是我不知道如何从连接中获取这个输出,exec_command 显然会给我 stdout 和 stderr,但是主机正在输出这在连接后立即进行,并且它不接受任何其他传入 requests/messages。它只是在 n 秒后关闭。

我不想等到超时才移动到下一个主机,我还想验证这是无法连接的原因,运行 检查,否则我的脚本会按预期工作。

非常感谢任何关于我如何捕获此输出的建议,无论是否使用 paramiko。

我想出了一个获取数据的方法,说实话很简单,虽然有点老套。这在其他情况下可能不起作用,尤其是在有延迟的情况下,但我也可能误解了发生的事情:

当连接打开时,服务器吐出两条消息,一条说它不能 chdir 到特定目录,然后几毫秒后它吐出另一条消息,说明您需要连接到另一个 IP。如果我在连接后立即发送命令(不管什么命令),exec_command 会将第二条消息解释为响应。所以现在我有了解决问题的方法,因为我可以检查此字符串中的已知消息并更改执行流程。

但是,如果我描述的是准确的,那么在延迟时间过长并且在收到服务器响应之前未发送 'test' 命令的情况下,这可能不起作用。

据我所知(我可能错得很厉害),目前还没有正确的方法在打开与 paramiko 的连接后立即获取标准输出流。如果有人知道方法,请告诉我。