1

ファブリックを介してインタラクティブな ssh シェルを開こうとしています。

要件:

  • リモートへの接続文字列でファブリック ホストを使用する
  • 現在のターミナルで完全にインタラクティブなシェルを開く
  • osx と ubuntu で動作します
  • fabric/python とリモート間のデータ転送は不要です。そのため、ファブリック タスクはバックグラウンドで終了する可能性があります。

ここのところ:

fabfile.py:

def test_ssh():
    from subprocess import Popen
    Popen('ssh user@1.2.3.4 -i "bla.pem"', shell=True)

ターミナルで:

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

[remote ubuntu welcome here]

remoteprompt$ |

次に、リモート プロンプトでコマンドを入力しようとすると、ローカルで実行され、ローカル プロンプトに戻ります。誰かが解決策を知っていますか?

注: fabrics については認識しopen_shellていますが、stdout が遅れて使用できなくなるため、これは機能しません。

4

1 に答える 1

0

わずかな変更でうまくいきます。

def test_ssh():
    from subprocess import call
    call('ssh user@1.2.3.4 -i "bla.pem"', shell=True)

この質問への回答が示唆しているように、エラーは、ssh がバックグラウンドでプロセスの stdin/out に接続できないことがエラーの原因であることを示唆しています。

ファブリック タスクはバックグラウンドで終了しませんがcall、stdin/out に干渉しない限り問題ありません。

于 2012-12-10T14:58:18.263 に答える