2012-12-05 51 views
0

我想通過fabric打開交互式ssh shell。從python打開交互式ssh shell時出錯

要求:

  • 連接字符串以遠程
  • 打開完全交互式殼中使用的織物的主機在當前終端
  • 作品在OSX和Ubuntu
  • 無需織物之間/數據傳送python和遠程。所以結構任務可以在後臺結束。

到目前爲止:

fabfile.py:

def test_ssh(): 
    from subprocess import Popen 
    Popen('ssh [email protected] -i "bla.pem"', shell=True) 

在終端:

localprompt$ fab test_ssh 
localprompt$ tcsetattr: Input/output error 

[remote ubuntu welcome here] 

remoteprompt$ | 

然後,如果我嘗試輸入的命令在遠程提示它被本地執行我回到當地的提示。 有誰知道解決方案?

注意:我知道織物open_shell,但這對我來說不起作用,因爲stdout滯後,導致無法使用。

+0

爲什麼你想打開一個ssh shell與織物?爲什麼不直接將命令作爲結構任務運行? –

+0

上面的代碼根本不使用結構。 Popen是當地的一名指揮官。我認爲在結構任務中執行它是沒有意義的。 –

+1

那麼,通常我通過結構做東西,但有些東西只需要一個交互式外殼。我想用fabric來做這件事,因爲現在我有大約20多個sh腳本來連接到我的各種服務器,並且開始讓我惱火地讓連接字符串保持同步。結構將是適當的工具,因爲它已經有了所有的連接字符串。 – RickyA

回答

0

的輕微修改的伎倆:

def test_ssh(): 
    from subprocess import call 
    call('ssh [email protected] -i "bla.pem"', shell=True) 

作爲回答這個question表明錯誤顯示錯誤來自於無力的ssh連接到標準輸入/輸出的過程的背景中。

call結構任務不會在後臺結束,但我很好,只要它不干擾我的stdin/out。