Capistrano 3.0 - 现在如何安全地提示输入密码?

jib*_*iel 8 ruby deployment capistrano capistrano3

在此之前3.0有一种方法可以做到这一点:

# ...
set :mysql_password, proc { Capistrano::CLI.password_prompt "Gimme remote database server password. Don't worry, I won't tell anyone: " }
# ...

namespace :db do
  desc 'Dump remote database'
  task :dump do
    run "mysqldump -u #{mysql_user} -p #{mysql_database} > ~/#{mysql_database}.sql" do |channel, stream, data|
      if data =~ /^Enter password:/
        channel.send_data "#{mysql_password}\n"
      end
    end
  end
end
Run Code Online (Sandbox Code Playgroud)

它提示输入密码,在您键入时不显示密码,并且在日志和输出中不留下任何痕迹.

现在,作为3.0我发现的唯一方式:

# ...

namespace :db do
  desc 'Dump remote database'
  task :dump do
    ask :mysql_password, nil
    on roles(:db) do
      execute "mysqldump -u#{fetch :mysql_user} -p#{fetch :mysql_password} #{fetch :mysql_database} > ~/#{fetch :mysql_database}.sql"
    end
  end
end
Run Code Online (Sandbox Code Playgroud)

它完成了这项工作,但随处可见密码.

有没有人找到一种安全的密码提示方式3.0?谢谢!

jib*_*iel 2

# Capistrano >= 3.3.3 supports `echo: false`\nask :password, \'default\', echo: false\nserver \'server.domain.com\', user: \'ssh_user_name\', port: 22, password: fetch(:password), roles: %w{web app db}\n
Run Code Online (Sandbox Code Playgroud)\n\n

\xe2\x80\x94 faq@capistranorb.com
\n\xe2\x80\x94 @mattbrictson,capistrano/capistrano

\n