SSH进入Django Shell
我正在尝试写一个简单的一行脚本,用来通过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
。