【问题标题】:Capistrano "No tty present and no askpass program specified"Capistrano“没有 tty 存在,也没有指定 askpass 程序”
【发布时间】:2015-06-23 22:37:57
【问题描述】:

我正在运行cap production deploy,并且在/usr/bin/env sudo mkdir -pv /home/[user]/apps/[app name] as [user@myIP] 之后不断收到以下错误sudo: no tty present and no askpass program specified

我不确定如何解决这个问题。

Capfile:

require 'capistrano/setup'
require 'capistrano/deploy'
require 'capistrano/rvm'
require 'capistrano/bundler'
require 'capistrano/rails/migrations'
require 'capistrano/passenger'
require 'capistrano/safe_deploy_to'
Dir.glob('lib/capistrano/tasks/*.rake').each { |r| import r }

有什么想法吗?

【问题讨论】:

    标签: ruby-on-rails postgresql ubuntu capistrano


    【解决方案1】:

    一个解决方案是allow the sudo command on your server without entering a password,但这可能存在安全风险。

    或者,您可以修复 Capistrano 配置,因为可能有问题。如果您向我们展示了您的 deploy.rb 文件的内容,这将有所帮助,但我要做的第一件事是确保您将 deploy.rb 中的 default_run_options[:pty] 设置为 true。或者如果您缺少该行,请添加它。

    Capistrano 2

    default_run_options[:pty] = true
    

    Capistrano 3

    set :pty, true
    

    【讨论】:

    • 密码显示为简单的文本,输入时没有任何反应
    • 凹凸 - 这也发生在我身上。我可以以明文形式输入密码,但是当我按 Enter 时没有任何反应。
    【解决方案2】:

    在服务器上打开 visudo 文件进行编辑:

    sudo visudo
    

    并列出您的部署用户无需输入密码即可运行的所有命令,例如:

    deploy_user        ALL=(ALL) NOPASSWD: \
      /bin/systemctl status puma_production, \
      /bin/systemctl start puma_production, \
      /bin/systemctl stop puma_production, \
      /bin/systemctl restart puma_production
    

    保存文件并再次尝试运行 capistrano 命令。您可以通过NOPASSWD:ALL 允许所有命令,但对于非特权用户而言,这被认为是不安全的。

    注意:确保您的可执行路径是完整的——例如。不是systemctl,而是/bin/systemctl,可以通过which systemctl命令获取

    【讨论】: