卡皮斯特拉诺 "No tty present and no askpass program specified"

Capistrano "No tty present and no askpass program specified"

我是 运行 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 }

有什么想法吗?

一种解决方案是 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

在服务器上打开 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命令

得到