Подтвердить что ты не робот

SSH в оболочку Django

Я пытаюсь написать простой однострочный script в ssh на удаленный хост, CD в каталог приложения Django и запустить manage.py 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)

И затем любой ввод, который я даю, но когда я нажимаю кнопку ввода, я не вижу ничего из stdout. Однако, если я введу синтаксически недействительный Python, я вижу трассировку Python из stderr.

Что еще мне не хватает?

4b9b3361

Ответ 1

Передайте параметр -t в ssh.

Принудительное распределение псевдо-tty. Это может быть использовано для выполнения произвольных программ на основе экрана на удаленной машине, что может быть очень полезно, например. при реализации услуг меню. Множество опций -t принудительно назначают tty, даже если ssh не имеет локального tty.

По умолчанию запуск ssh host command не выделяет правильное псевдо-tty, что делает невозможным выполнение любой программы, использующей процедуры вывода терминала, такие как интерпретаторы редактирования строк и т.д.

Следовательно, ваш однострочный шрифт может быть:

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

Можно, но не нужно обертывать другой слой bash, как вы. Помните, что ssh host command фактически передает command в качестве строки в оболочку по умолчанию пользователя (поэтому вы можете делать такие вещи, как cd), поэтому я не могу придумать, почему вам нужно будет запустите bash в пределах bash.