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