8

在此之前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?谢谢!

4

2 回答 2

2

目前,没有,可能在下一个次要版本(3.2)上:

如果可以选择不回显输入,这将很有帮助ask(),类似于前面Capistrano::CLI.password_prompt

...

无论哪种方式,这将是3.2的事情。

于 2014-03-24T13:57:04.373 回答
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

于 2015-07-24T16:18:14.963 回答