Rails, Capistrano, Ssh. Не удаётся подключиться к серверу

mbaev 24.06.2018, 15:41

Пол дня убил на выяснение причин и теперь просто необходимо записать результат расследования.

Предположим вы достигли стадии использования гема Capistrano и даже нашли хороший ман (хоть и старенький), в котором всё складно рассказывается. Вы всё настроили, прописали конфиги и в какой-то момент подходит время дрожащими руками запустить первую команду:

  1. cap production setup:upload_config

и мгновенно получаете по рукам острой ошибкой:

  1. cap production setup:upload_config --trace
  2. ** Invoke production (first_time)
  3. ** Execute production
  4. ** Invoke load:defaults (first_time)
  5. ** Execute load:defaults
  6. ** Invoke rvm:hook (first_time)
  7. ** Execute rvm:hook
  8. #<Thread:0x0000000001bd4c18@/home/mbaev/.rvm/gems/ruby-2.5.1/gems/sshkit-1.16.1/lib/sshkit/runners/parallel.rb:10 run> terminated with exception (report_on_exception is true):
  9. Traceback (most recent call last):
  10.         1: from /home/mbaev/.rvm/gems/ruby-2.5.1/gems/sshkit-1.16.1/lib/sshkit/runners/parallel.rb:11:in `block (2 levels) in execute'
  11. /home/mbaev/.rvm/gems/ruby-2.5.1/gems/sshkit-1.16.1/lib/sshkit/runners/parallel.rb:15:in `rescue in block (2 levels) in execute': Exception while executing as blabla@00.000.000.00: disconnected: Too many authentication failures (2) (SSHKit::Runner::ExecuteError)
  12. cap aborted!
  13. SSHKit::Runner::ExecuteError: Exception while executing as blabla@00.000.000.00: disconnected: Too many authentication failures (2)
  14. /home/mbaev/.rvm/gems/ruby-2.5.1/gems/sshkit-1.16.1/lib/sshkit/runners/parallel.rb:15:in `rescue in block (2 levels) in execute'
  15. /home/mbaev/.rvm/gems/ruby-2.5.1/gems/sshkit-1.16.1/lib/sshkit/runners/parallel.rb:11:in `block (2 levels) in execute'
  16.  
  17. Caused by:
  18. Net::SSH::Disconnect: disconnected: Too many authentication failures (2)
  19. /home/mbaev/.rvm/gems/ruby-2.5.1/gems/net-ssh-5.0.2/lib/net/ssh/transport/session.rb:198:in `block in poll_message'
  20. /home/mbaev/.rvm/gems/ruby-2.5.1/gems/net-ssh-5.0.2/lib/net/ssh/transport/session.rb:190:in `loop'
  21. /home/mbaev/.rvm/gems/ruby-2.5.1/gems/net-ssh-5.0.2/lib/net/ssh/transport/session.rb:190:in `poll_message'
  22. /home/mbaev/.rvm/gems/ruby-2.5.1/gems/net-ssh-5.0.2/lib/net/ssh/transport/session.rb:175:in `next_message'
  23. /home/mbaev/.rvm/gems/ruby-2.5.1/gems/net-ssh-5.0.2/lib/net/ssh/authentication/session.rb:101:in `block in next_message'
  24. /home/mbaev/.rvm/gems/ruby-2.5.1/gems/net-ssh-5.0.2/lib/net/ssh/authentication/session.rb:100:in `loop'
  25. /home/mbaev/.rvm/gems/ruby-2.5.1/gems/net-ssh-5.0.2/lib/net/ssh/authentication/session.rb:100:in `next_message'
  26. /home/mbaev/.rvm/gems/ruby-2.5.1/gems/net-ssh-5.0.2/lib/net/ssh/authentication/methods/publickey.rb:53:in `authenticate_with'
  27. /home/mbaev/.rvm/gems/ruby-2.5.1/gems/net-ssh-5.0.2/lib/net/ssh/authentication/methods/publickey.rb:20:in `block in authenticate'
  28. /home/mbaev/.rvm/gems/ruby-2.5.1/gems/net-ssh-5.0.2/lib/net/ssh/authentication/key_manager.rb:112:in `block in each_identity'
  29. /home/mbaev/.rvm/gems/ruby-2.5.1/gems/net-ssh-5.0.2/lib/net/ssh/authentication/key_manager.rb:104:in `each'
  30. /home/mbaev/.rvm/gems/ruby-2.5.1/gems/net-ssh-5.0.2/lib/net/ssh/authentication/key_manager.rb:104:in `each_identity'
  31. /home/mbaev/.rvm/gems/ruby-2.5.1/gems/net-ssh-5.0.2/lib/net/ssh/authentication/methods/publickey.rb:19:in `authenticate'
  32. /home/mbaev/.rvm/gems/ruby-2.5.1/gems/net-ssh-5.0.2/lib/net/ssh/authentication/session.rb:85:in `block in authenticate'
  33. /home/mbaev/.rvm/gems/ruby-2.5.1/gems/net-ssh-5.0.2/lib/net/ssh/authentication/session.rb:71:in `each'
  34. /home/mbaev/.rvm/gems/ruby-2.5.1/gems/net-ssh-5.0.2/lib/net/ssh/authentication/session.rb:71:in `authenticate'
  35. /home/mbaev/.rvm/gems/ruby-2.5.1/gems/net-ssh-5.0.2/lib/net/ssh.rb:246:in `start'
  36. /home/mbaev/.rvm/gems/ruby-2.5.1/gems/sshkit-1.16.1/lib/sshkit/backends/connection_pool.rb:59:in `call'
  37. /home/mbaev/.rvm/gems/ruby-2.5.1/gems/sshkit-1.16.1/lib/sshkit/backends/connection_pool.rb:59:in `with'
  38. /home/mbaev/.rvm/gems/ruby-2.5.1/gems/sshkit-1.16.1/lib/sshkit/backends/netssh.rb:176:in `with_ssh'
  39. /home/mbaev/.rvm/gems/ruby-2.5.1/gems/sshkit-1.16.1/lib/sshkit/backends/netssh.rb:129:in `execute_command'
  40. /home/mbaev/.rvm/gems/ruby-2.5.1/gems/sshkit-1.16.1/lib/sshkit/backends/abstract.rb:141:in `block in create_command_and_execute'
  41. /home/mbaev/.rvm/gems/ruby-2.5.1/gems/sshkit-1.16.1/lib/sshkit/backends/abstract.rb:141:in `tap'
  42. /home/mbaev/.rvm/gems/ruby-2.5.1/gems/sshkit-1.16.1/lib/sshkit/backends/abstract.rb:141:in `create_command_and_execute'
  43. /home/mbaev/.rvm/gems/ruby-2.5.1/gems/sshkit-1.16.1/lib/sshkit/backends/abstract.rb:55:in `test'
  44. /home/mbaev/.rvm/gems/ruby-2.5.1/gems/capistrano-rvm-0.1.2/lib/capistrano/tasks/rvm.rake:21:in `block (3 levels) in <top (required)>'
  45. /home/mbaev/.rvm/gems/ruby-2.5.1/gems/sshkit-1.16.1/lib/sshkit/backends/abstract.rb:29:in `instance_exec'
  46. /home/mbaev/.rvm/gems/ruby-2.5.1/gems/sshkit-1.16.1/lib/sshkit/backends/abstract.rb:29:in `run'
  47. /home/mbaev/.rvm/gems/ruby-2.5.1/gems/sshkit-1.16.1/lib/sshkit/runners/parallel.rb:12:in `block (2 levels) in execute'
  48. Tasks: TOP => rvm:hook

Главная строчка в этой ошибке

  1. Too many authentication failures (2)

Обычно это говорит о том, что вы ввели неправильно имя пользователя или пароль (если есть), или ключ указан не тот. Иногда это может быть порт не 22ой и т.д.

Начинаете проверять: первым делом пробуете вручную законнектиться с сервером - в порядке! Ip: 00.000.000.00 указан верно, ключик id_rsa лежит на месте и даже пользователь blabla существует! Дальше дебажите, беситесь, пьёте кофе, разбиваете клавиатуру, соседа. Как обычно успокаивает только кот... А тем временем, решение крайне не очевидное: нужно добавить ключ в окружение через

  1. ssh-add -K ~/.ssh/id_rsa

Решение найдено здесь