title: SSHKit::Runner::ExecuteError: Exception while executing on host xx.xx.xx.xx: connection closed by remote host
body: <p>We are implementing capistrano for our rails application (Rails 5 + aws + ruby 2.3.1 + capistrano 3).</p>
  
  <h3>deploy.rb</h3>
  
  <pre><code>server 'my aws server ip', port: 3000, roles: [:web, :app, :db], primary: true
  set :repo_url, 'git@github.com:myusername/myrepo.git'
  set :application, 'myapp'
  set :user, 'ubuntu'
  set :puma_threads, [4, 16]
  set :puma_workers, 0
  set :pty, true
  set :use_sudo, false
  set :stage, :production
  set :deploy_via, :remote_cache
  set :deploy_to, "/home/#{fetch(:user)}/apps/#{fetch(:application)}"
  set :puma_bind, "unix://#{shared_path}/tmp/sockets/#        {fetch(:application)}-puma.sock"
  set :puma_state, "#{shared_path}/tmp/pids/puma.state"
  set :puma_pid, "#{shared_path}/tmp/pids/puma.pid"
  set :puma_access_log, "#{release_path}/log/puma.error.log"
  set :puma_error_log, "#{release_path}/log/puma.access.log"
  set :ssh_options, { forward_agent: true, user: fetch(:user), keys:     %w(~/.ssh/id_rsa) }
  set :puma_preload_app, true
  set :puma_worker_timeout, nil
  set :puma_init_active_record, true # Change to false when not using     ActiveRecord
  namespace :puma do
  desc 'Create Directories for Puma Pids and Socket'
  task :make_dirs do
  on roles(:app) do
  execute "mkdir #{shared_path}/tmp/sockets -p"
  execute "mkdir #{shared_path}/tmp/pids -p"
  end
  end
  ` before :start, :make_dirs` `end` `namespace :deploy do` ` desc "Make         sure local git is in sync with remote."` ` task :check_revision do` ` on     roles(:app) do` ` unless `git rev-parse HEAD` == `git rev-parse     origin/master
  puts "WARNING: HEAD is not the same as origin/master"
  puts "Rungit pushto sync changes."
  exit
  end
  end
  end
  desc 'Initial Deploy'
  task :initial do
  on roles(:app) do
  before 'deploy:restart', 'puma:start'
  invoke 'deploy'
  end
  end
  desc 'Restart application'
  task :restart do
  on roles(:app), in: :sequence, wait: 5 do
  invoke 'puma:restart'
  end
  end
  before :starting, :check_revision
  after :finishing, :compile_assets
  after :finishing, :cleanup
  after :finishing, :restart
  end
  </code></pre>
  
  <h3>deploy/production.rb</h3>
  
  <pre><code>set :user, "ubuntu"
  server "my aws ip", port: 3000, roles: [:app, :web, :db], :primary =&gt; true
  set :ssh_options, { forward_agent: true, user: fetch(:user), keys:     %w(~/.ssh/id_rsa) }
  </code></pre>
  
  <h3>Gemfile</h3>
  
  <pre><code>gem 'capistrano', require: false
  gem 'capistrano-rvm', require: false
  gem 'capistrano-rails', require: false
  gem 'capistrano-bundler', require: false
  gem 'capistrano3-puma', require: false
  </code></pre>
  
  <p>While I execute the following command,</p>
  
  <pre><code>cap production deploy
  </code></pre>
  
  <p>I get the following error:</p>
  
  <pre><code>SSHKit::Runner::ExecuteError: Exception while executing on host xx.xx.xx.xx: connection closed by remote host
  </code></pre>
  
  <p>Please help me get out of this.</p>