2011-08-02 57 views
12

我正在嘗試編寫一個簡單的單行腳本,將ssh轉換爲遠程主機,CD到我的Django應用程序的目錄,然後運行manage.py shell。到目前爲止,我有:SSH進入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鍵,我似乎沒有看到任何標準輸出。但是,如果我輸入語法無效的Python,我會看到來自stderr的Python回溯。

我還缺少什麼?

回答

17

-t選項傳遞給ssh

強制僞tty分配。這可以用於在遠程機器上執行任意基於屏幕的程序,這可能是非常有用的,例如,當實現菜單服務時。多個-t選項強制tty分配,即使ssh沒有本地tty。

缺省情況下,運行ssh host command不分配一個適當的僞終端,這使得使用終端逃逸例程,如行編輯翻譯等失敗的任何程序。

因此,您的一行代碼即可:

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

是可能的,但像你這樣沒必要在bash的另一層包。請記住,ssh host command實際上通過command作爲一個字符串到用戶的默認外殼(這就是爲什麼你可以做具體的殼之類的東西cd),所以我不能想出一個理由,爲什麼你就必須在bash運行bash

+1

「非常有趣的問題!」 我現在正在嘗試找到答案,並將編輯它以添加更多,因爲我去「部分是沒有幫助的。你可以刪除它,並煮沸這個沒有豐富多彩的評論的答案? –

+0

謝謝。我太親密了:) – Cerin

+0

沒有必要使用'cd '部分,只需要執行'ssh -t -i mysite.pem root @ remotehost'python /usr/local/myapp/manage.py shell'' –