SSH进入Django Shell

12 投票
1 回答
2995 浏览
提问于 2025-04-16 22:43

我正在尝试写一个简单的一行脚本,用来通过SSH连接到远程主机,进入我的Django应用程序的目录,然后运行 manage.py shell。到目前为止,我的代码是:

ssh -i mysite.pem root@remotehost "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)

然后是我输入的内容,但当我按下回车键时,我似乎看不到任何来自标准输出的内容。不过,如果我输入不合法的Python语法,我可以看到来自标准错误的Python错误信息。

我还缺少什么呢?

1 个回答

17

在使用 ssh 时,加上 -t 这个选项。

这个选项的作用是强制分配一个伪终端。这样可以在远程机器上运行一些需要屏幕的程序,这在实现菜单服务时特别有用。如果你加多个 -t 选项,即使本地没有终端,也会强制分配终端。

默认情况下,运行 ssh host command 时并不会分配一个合适的伪终端,这样就会导致一些需要终端控制的程序,比如行编辑器等,无法正常工作。

所以,你可以这样写一行命令:

ssh -t -i mysite.pem root@remotehost python /usr/local/myapp/manage.py shell

其实你可以不需要再用一层 bash 像你之前那样。要记住,ssh host command 实际上是把 command 作为字符串传给用户的默认 shell(这就是你可以做一些特定于 shell 的操作,比如 cd 的原因),所以我想不出有什么理由需要在 bash 里面再运行一次 bash

撰写回答