2011-08-02 12 views
12

私はリモートホストにsshへのシンプルな一行スクリプト、DjangoアプリケーションのディレクトリへのCD、そしてmanage.py shellを実行しようとしています。これまでのところ、私は持っています:SSH to Django Shell

ssh -i mysite.pem [email protected] "cd /usr/local/myapp; /bin/bash -i -c \"python manage.py shell;\"" 

これは私のコマンドからの出力を見ることができないという警告が働いているようです。私が見るのは、

Python 2.6.4 (r264:75706, Jun 4 2010, 18:20:16) 
[GCC 4.4.4 20100503 (Red Hat 4.4.4-2)] on linux2 
Type "help", "copyright", "credits" or "license" for more information. 
(InteractiveConsole) 

入力しても入力できますが、Enterキーを押すとstdoutから何も表示されません。しかし、構文的に無効なPythonを入力すると、stderrのPythonトレースバックが表示されます。

他に何が欠けていますか?

答えて

17

-tオプションをsshに渡します。

強制的な擬似割り当て。これは、リモートマシン上で任意のスクリーンベースのプログラムを実行するために使用できます。メニューサービスを実装するとき複数の-tオプションは、sshにローカルttyがない場合でも、ttyの割り当てを強制します。デフォルトでは

ssh host commandを実行すると失敗するなど、そのような行編集通訳などの端末エスケープルーチンを、使用するすべてのプログラムを行い、適切な仮想端末を割り当てません。

したがって、あなたのワンライナーを使用できます

ssh -t -i mysite.pem [email protected] python /usr/local/myapp/manage.py shell 

それが、しかし、あなたがやったようにbashの別の層の中にラップする必要はありません可能です。 ssh host commandは、をbashの範囲で実行する必要がある理由を考えることができないため、実際にcommandを文字列としてユーザーのデフォルトシェルに渡します(これはシェル固有のもの(cdなど)です)。

+1

「非常に興味深い質問! 私は答えを見つけるために今実験していますが、私が行ったようにそれを追加するために編集しています」という部分は役に立たない。カラフルな解説なしでそれを取り除いて答えに沸かせることができますか? –

+0

ありがとうございます。私はとても親切でした:) – Cerin

+0

'cd 'の部分は必要ありません。 'ssh -t -i mysite.pem root @ remotehost 'python /usr/local/myapp/manage.py shell'' –