Сбой Net :: SSH :: аутентификации при развертывании приложения Rails 4.2.x с использованием capistrano 3.6.1

#ruby-on-rails #capistrano3

#ruby-on-rails #capistrano3

Вопрос:

Когда я пытаюсь развернуть приложение с помощью capistrano 3.6.1 и ruby 2.3.1, я получаю следующую ошибку для Rails 4.2.x

 amit@amit:~/smart-recruit$ cap production doctor
(Backtrace restricted to imported tasks)
cap aborted!
Net::SSH::AuthenticationFailed: Authentication failed for user deploy@myserver.com

Tasks: TOP => rvm:hook => passenger:rvm:hook => passenger:test_which_passenger
(See full trace by running task with --trace)
  

deploy.rb

 # config valid only for current version of Capistrano
lock '3.6.1'

set :application, 'smart-recruit'
set :repo_url, 'git@github.com:SomeUser/smart-recruit.git'
set :deploy_to, '/var/www/rubyapps/smart-recruit'


set :user, 'deploy'
set :pty, false   #There is a known bug that prevents sidekiq from starting when pty is true on Capistrano 3.
set :use_sudo, true
set :deploy_via, :remote_cache

set :linked_files, %w{config/database.yml config/secrets.yml}
set :linked_dirs, %w{log tmp/pids tmp/cache tmp/sockets vendor/bundle public/system}


set :branch, 'development'
set :ssh_options, { forward_agent: true, user: fetch(:user), keys: %w(~/.ssh/id_rsa.pub)}
  

config / deploy/production.rb

 set :stage, :production
server 'myserver.com', roles: %w{web app db}, primary: true
  

Capfile

 # Load DSL and set up stages
require 'capistrano/setup'

# Include default deployment tasks
require 'capistrano/deploy'
require 'capistrano/bundler'
require 'capistrano/rails'
require 'capistrano/rvm'
require 'capistrano/rails/assets'
require 'capistrano/rails/migrations'
require 'capistrano/faster_assets'
require 'capistrano/passenger'
require 'capistrano/sidekiq'

# Load custom tasks from `lib/capistrano/tasks` if you have any defined
Dir.glob("lib/capistrano/tasks/*.rake").each { |r| import r }


set :rvm_type, :user
set :rvm_ruby_version, '2.3.1'
  

Я проверил, что passenger apache нормально работает на сервере.

Примечание: он отлично работает для Ruby 2.2.2 и Capistrano 3.5.0 в других приложениях

Обновление пробовал с Ruby 2.2.2 и Capistrano 3.5.0, но получаю ту же ошибку

 amit@amit:~/smart-recruit$ cap production deploy:check --trace
** Invoke production (first_time)
** Execute production
** Invoke load:defaults (first_time)
** Execute load:defaults
** Invoke bundler:map_bins (first_time)
** Invoke passenger:bundler:hook (first_time)
** Execute passenger:bundler:hook
** Execute bundler:map_bins
** Invoke deploy:set_rails_env (first_time)
** Execute deploy:set_rails_env
** Invoke deploy:set_linked_dirs (first_time)
** Execute deploy:set_linked_dirs
** Invoke deploy:set_rails_env 
** Invoke rvm:hook (first_time)
** Invoke passenger:rvm:hook (first_time)
** Invoke passenger:test_which_passenger (first_time)
** Execute passenger:test_which_passenger
cap aborted!
Net::SSH::AuthenticationFailed: Authentication failed for user deploy@myserver.com
/home/amit/.rvm/gems/ruby-2.2.2/gems/net-ssh-3.2.0/lib/net/ssh.rb:249:in `start'
/home/amit/.rvm/gems/ruby-2.2.2/gems/sshkit-1.11.3/lib/sshkit/backends/connection_pool.rb:59:in `call'
/home/amit/.rvm/gems/ruby-2.2.2/gems/sshkit-1.11.3/lib/sshkit/backends/connection_pool.rb:59:in `with'
/home/amit/.rvm/gems/ruby-2.2.2/gems/sshkit-1.11.3/lib/sshkit/backends/netssh.rb:155:in `with_ssh'
/home/amit/.rvm/gems/ruby-2.2.2/gems/sshkit-1.11.3/lib/sshkit/backends/netssh.rb:108:in `execute_command'
/home/amit/.rvm/gems/ruby-2.2.2/gems/sshkit-1.11.3/lib/sshkit/backends/abstract.rb:141:in `block in create_command_and_execute'
/home/amit/.rvm/gems/ruby-2.2.2/gems/sshkit-1.11.3/lib/sshkit/backends/abstract.rb:141:in `tap'
/home/amit/.rvm/gems/ruby-2.2.2/gems/sshkit-1.11.3/lib/sshkit/backends/abstract.rb:141:in `create_command_and_execute'
/home/amit/.rvm/gems/ruby-2.2.2/gems/sshkit-1.11.3/lib/sshkit/backends/abstract.rb:55:in `test'
/home/amit/.rvm/gems/ruby-2.2.2/gems/capistrano-passenger-0.2.0/lib/capistrano/tasks/passenger.cap:42:in `block (3 levels) in <top (required)>'
/home/amit/.rvm/gems/ruby-2.2.2/gems/sshkit-1.11.3/lib/sshkit/backends/abstract.rb:29:in `instance_exec'
/home/amit/.rvm/gems/ruby-2.2.2/gems/sshkit-1.11.3/lib/sshkit/backends/abstract.rb:29:in `run'
/home/amit/.rvm/gems/ruby-2.2.2/gems/sshkit-1.11.3/lib/sshkit/runners/parallel.rb:12:in `block (2 levels) in execute'
Tasks: TOP => rvm:hook => passenger:rvm:hook => passenger:test_which_passenger
  

Комментарии:

1. Согласно «он отлично работает … в других приложениях», если вы понизите этот точный сценарий развертывания до Capistrano 3.5.0 и Ruby 2.2.2, это сработает?

2. @will_in_wi Я пробовал это, но, к удивлению, это не работает с новым приложением.

3. Есть ли у вас рабочие конфигурации, развертываемые на том же сервере с тем же пользователем?

4. Нет. У меня есть рабочая конфигурация для разных серверов. Я сравниваю все конфигурации с другими приложениями. Отличаются только имя ветки и IP-адрес сервера.

5. Можете ли вы подключиться к этому серверу по ssh от имени этого пользователя без запроса пароля?