【问题标题】:sudo: no tty present and no askpass program specifiedsudo:不存在 tty,也没有指定 askpass 程序
【发布时间】:2012-07-31 11:36:41
【问题描述】:

我尝试了 jakelaunch 一点,但是当我想部署我的 node.js 应用程序时,我在此过程中得到了这个:

$ ssh mydomain.com sudo stop site.WebApp-production && sudo start site.WebApp-production
sudo: no tty present and no askpass program specified

✘  Failed to restart site

jake aborted.
Error
  at fail (/usr/local/lib/node_modules/jake/lib/api.js:235:13)
  at /Users/udo/Projects/WebApp/Jakefile.coffee:31:16
  at ChildProcess.exports.remote (/Users/udo/Projects/WebApp/node_modules/launch/lib/action.js:39:5)
  at ChildProcess.EventEmitter.emit (events.js:91:17)
  at Process._handle.onexit (child_process.js:674:10)

你知道如何摆脱它吗?我在远程机器上使用 Debian 6。

谢谢

【问题讨论】:

    标签: node.js deployment debian jake


    【解决方案1】:

    试试ssh -t,它会在运行命令时强制分配 TTY。这对sudo 来说已经足够了,至少在我的 Mac 上尝试通过 SSH 命令进入我的 Ubuntu boxen 时。

    【讨论】:

      【解决方案2】:

      ssh <host> <command> 尝试在没有任何交互的情况下在主机上运行命令。在您的情况下,sudo 需要一个密码,因为它不是交互式会话,所以它无法获得。如果您真的想要这个,请配置 sudo 以在不询问密码的情况下接受您。

      编辑:另外,ssh <host> <command1> && <command2> 将在本地机器上运行 command2,而不是在远程机器上。

      【讨论】:

      • 有没有办法从 /etc/init.d/ 启动服务而不是 root 或使用 sudo?也许只针对这个特殊用户?我真的不希望任何用户在不询问密码的情况下允许使用 sudo ..
      • 您可以通过无密码 sudo 允许给定用户像给定其他用户一样使用给定命令(阅读:您不必向所有人提供无密码 sudo;您甚至可以限制允许在没有密码的情况下执行 sudo 操作的用户);这仍然有一些安全隐患(例如,该用户可能获得完整的 root 权限),但他们现在也可以使用“sudo bash”来做到这一点(尽管他们必须提供密码)