在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
找到了一种安全的密码提示方式吗?谢谢!
答案 0 :(得分:2)
目前,no可能是下一个次要版本(3.2):
如果
ask()
有一个不回应输入的选项,那将会很有帮助 到上一个Capistrano::CLI.password_prompt
...
无论哪种方式,它都是3.2的东西。
答案 1 :(得分: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