2016-04-12 50 views
1

我正在寫一個腳本,它使用paramiko ssh到幾個遠程主機上並運行一些檢查。有些主機被設置爲其他設備的故障轉移,我無法確定哪些主機正在使用,直到嘗試連接。當連接到這些'非活動'主機之一時,主機會通知我你需要連接到另一個「主動」IP,然後在n秒後關閉連接。這似乎寫入SSH連接/會話的標準輸出(即,它不是SSH標語)。Paramiko從連接對象獲得stdout(不是exec_command)

我已經使用了paramiko相當多的,但我不知道如何從連接得到這個輸出,exec_command顯然會給我stdout和stderr,但主機在連接時立即輸出,它不接受任何其他傳入的請求/消息。它在n秒後關閉。

我不想等到超時才能移到下一個主機上,我也想驗證這是不能連接和運行檢查的原因,否則我的腳本將作爲意。

任何有關如何捕捉這個輸出,無論有沒有paramiko的建議,都非常感謝。

回答

0

我想出了一種獲取數據的方式,說實話,雖然有點冒失,但是非常簡單。這在其他情況下可能不起作用,特別是在存在延遲的情況下,但我也可能誤解發生了什麼:

當連接打開時,服務器吐出兩條消息,一條說它不能chdir到特定目錄,然後幾毫秒後它會發出另一條消息,指出您需要連接到另一個IP。如果我在連接後立即發送命令(無關緊要),exec_command會將此第二條消息解釋爲響應。所以現在我有一個解決我的問題,因爲我可以檢查這個字符串的已知消息,並改變執行流程。

但是,如果我描述的是準確的,那麼在收到服務器響應之前沒有發送「測試」命令的情況下,這可能不起作用。

據我可以告訴(我可能是非常錯誤的),目前沒有正確的方式來打開與paramiko連接後立即得到標準輸出流。如果有人知道方法,請告訴我。