SSH进入Django Shell

Cer*_*rin 12 python django ssh

我正在尝试编写一个简单的单行脚本来ssh到远程主机,CD到我的Django应用程序的目录,然后运行manage.py shell.到目前为止,我有:

ssh -i mysite.pem root@remotehost "cd /usr/local/myapp; /bin/bash -i -c \"python manage.py shell;\""
Run Code Online (Sandbox Code Playgroud)

这似乎与我的命令中看不到任何输出的警告有关.我只看到:

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)
Run Code Online (Sandbox Code Playgroud)

然后我给出了任何输入,但是当我按下回车时,我似乎没有看到任何来自stdout的内容.但是,如果我输入语法无效的Python,我确实会看到来自stderr的Python回溯.

我还缺少什么?

Del*_*ani 17

-t选项传递给ssh.

强制伪tty分配.这可以用于在远程机器上执行任意基于屏幕的程序,这可以是非常有用的,例如在实现菜单服务时.多个-t选项强制tty分配,即使ssh没有本地tty.

默认情况下,运行ssh host command不会分配正确的伪tty,这使得任何使用终端转义例程的程序(如行编辑解释程序等)都会失败.

因此,您的单行可以是:

ssh -t -i mysite.pem root@remotehost python /usr/local/myapp/manage.py shell
Run Code Online (Sandbox Code Playgroud)

有可能,但不需要像你那样包装另一层bash.请记住,ssh host command实际上传递command一个字符串到用户的默认外壳(这就是为什么你可以做具体的壳之类的东西cd),所以我不能想出一个理由,为什么你需要运行bashbash.