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

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 

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

现在,从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 

它完成工作,但到处显示密码。

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

目前, 不 ,可能是下一个次要版本(3.2):

如果ask()有一个不回显输入的选项会很有帮助,类似于之前的Capistrano::CLI.password_prompt

无论哪种方式,它都将是3.2。

 # Capistrano >= 3.3.3 supports `echo: false` ask :password, 'default', echo: false server 'server.domain.com', user: 'ssh_user_name', port: 22, password: fetch(:password), roles: %w{web app db} 

faq@capistranorb.com
– @mattbrictson,capistrano / capistrano