desc 'Starts SSH connection to a remote server.' task :ssh do
servers = [] on roles (ENV['ROLE'] || :app).to_sym do |server| servers << server end puts 'Available servers:' servers.each_with_index { |server, i| puts " #{i + 1}. #{server.hostname}" } set :server, ask(:server, '1') if servers.count == 1 || !(1..servers.count).include?(fetch(:server).to_i) current_server = servers.first else current_server = servers[fetch(:server).to_i - 1] end puts "Connecting to #{current_server.hostname}..." port = current_server.port || fetch(:ssh_options, {})[:port] || 22 ssh_command = "ssh -p #{port} #{current_server.user}@#{current_server.hostname}" cd_command = "cd #{fetch(:deploy_to)} && bash" system "#{ssh_command} -t \"#{cd_command}\""
end