質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

ただいまの
回答率

89.08%

[Ruby on Rails]Capistranoを実行しようとするとSSHKit::Runner::ExecuteErrorが発生する

受付中

回答 1

投稿

  • 評価
  • クリップ 1
  • VIEW 1,548

tkaz

score 10

前提・実現したいこと

Ruby on railsでアプリケーションを作成しています。
最終的にはcapistranoを使用し、自動デプロイが実行できるようにしたいと考えています。
デプロイ先はAWSになります。エラーメッセージが表示されているため表示されているエラーメッセージの内容を解決したいと考えています。

ローカルPC内にvirtualboxとVagrantを使用してUbuntuの環境を構築し、その中にアプリケーションを置いています。
AWSの鍵はローカルPCの.sshディレクトリの中に格納しています。

発生している問題・エラーメッセージ

アプリケーションのディレクトリに移動し、下記コマンドを実行するとエラーメッセージが表示されます

$ bundle exec cap production deploy:check


以下エラーメッセージ

[Deprecation Notice] Future versions of Capistrano will not load the Git SCM
plugin by default. To silence this deprecation warning, add the following to
your Capfile after `require "capistrano/deploy"`:

    require "capistrano/scm/git"
    install_plugin Capistrano::SCM::Git

#<Thread:0x000055ca107f5320@/var/lib/gems/2.5.0/gems/sshkit-1.18.0/lib/sshkit/runners/parallel.rb:10 run> terminated with exception (report_on_exception is true):
Traceback (most recent call last):
    1: from /var/lib/gems/2.5.0/gems/sshkit-1.18.0/lib/sshkit/runners/parallel.rb:11:in `block (2 levels) in execute'
/var/lib/gems/2.5.0/gems/sshkit-1.18.0/lib/sshkit/runners/parallel.rb:15:in `rescue in block (2 levels) in execute': Exception while executing as ec2-user@**.**.**.** : Authentication failed for user ec2-user@**.**.**.** (SSHKit::Runner::ExecuteError)
(Backtrace restricted to imported tasks)
cap aborted!
SSHKit::Runner::ExecuteError: Exception while executing as ec2-user@**.**.**.** : Authentication failed for user ec2-user@**.**.**.** 


Caused by:
Net::SSH::AuthenticationFailed: Authentication failed for user ec2-user@**.**.**.** 

該当のソースコード

unicorn.rb

app_path = File.expand_path('../../../', __FILE__)

worker_processes 1

working_directory "#{app_path}/current"
pid "#{app_path}/shared/tmp/pids/unicorn.pid"
stderr_path "#{app_path}/shared/log/unicorn.stderr.log"
stdout_path "#{app_path}/shared/log/unicorn.stdout.log"

listen "#{app_path}/shared/tmp/sockets/unicorn.sock"
timeout 60

preload_app true
GC.respond_to?(:copy_on_write_friendly=) && GC.copy_on_write_friendly = true

check_client_connection false

run_once = true

before_fork do |server, worker|
  defined?(ActiveRecord::Base) &&
    ActiveRecord::Base.connection.disconnect!

  if run_once
    run_once = false # prevent from firing again
  end

  old_pid = "#{server.config[:pid]}.oldbin"
  if File.exist?(old_pid) && server.pid != old_pid
    begin
      sig = (worker.nr + 1) >= server.worker_processes ? :QUIT : :TTOU
      Process.kill(sig, File.read(old_pid).to_i)
    rescue Errno::ENOENT, Errno::ESRCH => e
      logger.error e
    end
  end
end

after_fork do |_server, _worker|
  defined?(ActiveRecord::Base) && ActiveRecord::Base.establish_connection
end

production.rb

server '**.**.**.**',user: 'ec2-user', roles: %w{app db web}

deploy.rb

# config valid only for current version of Capistrano

set :application, 'yyyyy'
set :repo_url,  'git@github.com:xxxxxx/yyyyy.git'
set :deploy_to, '/var/www/yyyyy'

set :linked_dirs, fetch(:linked_dirs, []).push('log', 'tmp/pids', 'tmp/cache', 'tmp/sockets', 'vendor/bundle', 'public/system', 'public/uploads')

set :rbenv_type, :user
set :rbenv_ruby, '2.5.1'
set :ssh_options, auth_methods: ['publickey'],
                  keys: ['~/.ssh/key_pair.pem']
set :unicorn_pid, -> { "#{shared_path}/tmp/pids/unicorn.pid" }
set :unicorn_config_path, -> { "#{current_path}/config/unicorn.rb" }
set :keep_releases, 5

after 'deploy:publishing', 'deploy:restart'
namespace :deploy do
  task :restart do
    invoke 'unicorn:restart'
  end
end


capfile.rb

require "capistrano/setup"
require "capistrano/deploy"

require 'capistrano/rbenv'
require 'capistrano/bundler'
require 'capistrano/rails/assets'
require 'capistrano/rails/migrations'
require 'capistrano3/unicorn'

Dir.glob("lib/capistrano/tasks/*.rake").each { |r| import r }

試したこと

deploy.rbに記述しているkey_pair.pemを使用し、AWSのアクセスができるかを試しました。

$ ssh -i key_pair.pem ec2-user@**.**.**.**
       __|  __|_  )
       _|  (     /   Amazon Linux AMI
      ___|\___|___|

https://aws.amazon.com/amazon-linux-ami/2018.03-release-notes/
[ec2-user@ip-***-**-**-*** ~]$ 


結果接続はできました。そのため、使用する鍵はあっていると考えています。

補足情報(FW/ツールのバージョンなど)

Ubuntu環境
ubuntu: 18.04.1
ruby: 2.5.1p57 (2018-03-29 revision 63029) [x86_64-linux-gnu]
Ruby on Rails: Rails 5.2.2
capistrano (3.11.0)
capistrano-bundler (1.5.0)
capistrano-rails (1.4.0)
capistrano-rbenv (2.1.4)
capistrano3-unicorn (0.2.1)

AWS環境
ruby: 2.5.1p57 (2018-03-29 revision 63029) [x86_64-linux-gnu]
Ruby on Rails: Rails 5.2.2

どなたかご教授いただけたらと思います。
ご不明点があればお手数ですがご一報くださいますようお願いします。

  • 気になる質問をクリップする

    クリップした質問は、後からいつでもマイページで確認できます。

    またクリップした質問に回答があった際、通知やメールを受け取ることができます。

    クリップを取り消します

  • 良い質問の評価を上げる

    以下のような質問は評価を上げましょう

    • 質問内容が明確
    • 自分も答えを知りたい
    • 質問者以外のユーザにも役立つ

    評価が高い質問は、TOPページの「注目」タブのフィードに表示されやすくなります。

    質問の評価を上げたことを取り消します

  • 評価を下げられる数の上限に達しました

    評価を下げることができません

    • 1日5回まで評価を下げられます
    • 1日に1ユーザに対して2回まで評価を下げられます

    質問の評価を下げる

    teratailでは下記のような質問を「具体的に困っていることがない質問」、「サイトポリシーに違反する質問」と定義し、推奨していません。

    • プログラミングに関係のない質問
    • やってほしいことだけを記載した丸投げの質問
    • 問題・課題が含まれていない質問
    • 意図的に内容が抹消された質問
    • 過去に投稿した質問と同じ内容の質問
    • 広告と受け取られるような投稿

    評価が下がると、TOPページの「アクティブ」「注目」タブのフィードに表示されにくくなります。

    質問の評価を下げたことを取り消します

    この機能は開放されていません

    評価を下げる条件を満たしてません

    評価を下げる理由を選択してください

    詳細な説明はこちら

    上記に当てはまらず、質問内容が明確になっていない質問には「情報の追加・修正依頼」機能からコメントをしてください。

    質問の評価を下げる機能の利用条件

    この機能を利用するためには、以下の事項を行う必要があります。

質問への追記・修正、ベストアンサー選択の依頼

  • matsuand

    2019/01/17 10:01

    docker未経験なので思いつきのコメントをします。key_pair.pem によるアクセスはローカルPCから? virtualbox 内からこれにアクセスできるのですか?

    キャンセル

  • CHERRY

    2019/01/17 12:12 編集

    Ubuntu でデプロイを実行していると判断しましたが、AWSの鍵を Ubuntu の ~/.ssh に置くとどうなりますか?

    キャンセル

回答 1

0

昨日まで全く同じ問題にぶち当たっていた初学者です。
私は経験が浅いので確実なアドバイスはできませんが、エラーをみる限りssh接続が失敗していると思われます。
私が昨日投稿した質問の解決策「config/deploy/production.rbの記述方法を変えてみる」試してみてはどうでしょう。
以下リンクです。
https://teratail.com/questions/169386

投稿

  • 回答の評価を上げる

    以下のような回答は評価を上げましょう

    • 正しい回答
    • わかりやすい回答
    • ためになる回答

    評価が高い回答ほどページの上位に表示されます。

  • 回答の評価を下げる

    下記のような回答は推奨されていません。

    • 間違っている回答
    • 質問の回答になっていない投稿
    • スパムや攻撃的な表現を用いた投稿

    評価を下げる際はその理由を明確に伝え、適切な回答に修正してもらいましょう。

15分調べてもわからないことは、teratailで質問しよう!

  • ただいまの回答率 89.08%
  • 質問をまとめることで、思考を整理して素早く解決
  • テンプレート機能で、簡単に質問をまとめられる

関連した質問

同じタグがついた質問を見る