Rails:Capistrano。被拒绝(公钥)

时间:2015-08-03 21:15:50

标签: ruby-on-rails capistrano

我一直在寻找使用capistrano部署我的应用的方法。我目前正在github和本地服务器上托管一个小型私人仓库来尝试部署我的测试。我遇到了一个问题和下面的错误信息。

我做了以下

  1. 在服务器上生成一个ssh密钥并成功添加它以在repo中部署密钥并进行测试(git@github.com)

  2. 在客户端生成一个ssh密钥并成功添加它以在repo中部署密钥

  3. 设置私有存储库。并让帐户部署者有权部署

  4. configed deploy.rb和production rb跟随模仿那里的许多其他模板。
  5. 我仍然无法理解为什么它会给我一个像这样的错误

        DEBUG [a5554d3d] Command: /usr/bin/env chmod +x /tmp/App/git-ssh.sh
        INFO [a5554d3d] Finished in 0.020 seconds with exit status 0 (successful).
        INFO [b1517df1] Running /usr/bin/env git ls-remote --heads git@github.com:aceofw
        ings/App.git as deploy@192.168.1.84
        DEBUG [b1517df1] Command: ( GIT_ASKPASS=/bin/echo GIT_SSH=/tmp/App/git-ssh
        .sh /usr/bin/env git ls-remote --heads git@github.com:aceofwings/App.git )
    
        DEBUG [b1517df1]        Permission denied (publickey).
        DEBUG [b1517df1]        fatal: Could not read from remote repository.
        DEBUG [b1517df1]
        DEBUG [b1517df1]        Please make sure you have the correct access rights
        DEBUG [b1517df1]        and the repository exists.
        (Backtrace restricted to imported tasks)
        cap aborted!
        SSHKit::Runner::ExecuteError: Exception while executing as deploy@192.168.1.84:
        git exit status: 128
        git stdout: Nothing written
        git stderr: Permission denied (publickey).
        fatal: Could not read from remote repository.
    
        Please make sure you have the correct access rights
        and the repository exists.
    
        SSHKit::Command::Failed: git exit status: 128
        git stdout: Nothing written
    


    Deploy.rb文件

       ###############Deploy.rb##################
    # config valid only for current version of Capistrano
    lock '3.4.0'
    
    set :repo_url, 'git@github.com:aceofwings/App.git'
    set :application, 'App'
    set :user, 'deploy'
    #set :pty, true
    # Default branch is :master
    # ask :branch, `git rev-parse --abbrev-ref HEAD`.chomp
    
    
    
    # Default value for linked_dirs is []
    # set :linked_dirs, fetch(:linked_dirs, []).push('log', 'tmp/pids', 'tmp/cache', 'tmp/sockets', 'vendor/bundle', 'public/system')
    
    
    namespace :deploy do
    
      after :restart, :clear_cache do
        on roles(:web), in: :groups, limit: 3, wait: 10 do
          # Here we can do anything such as:
          # within release_path do
          #   execute :rake, 'cache:clear'
          # end
        end
      end
    
    end
    


        Production.rb

    server '192.168.1.84', user: 'deploy', roles: %w{app db web}
    
    #set :stage, :production
     role :app, %w{deploy@192.168.1.84}
     role :web, %w{deploy@192.168.1.84}
     role :db,  %w{deploy@192.168.1.84}
    
    
      set :ssh_options, {
        forward_agent: false,
        auth_methods: %w(password),
        password: 'Deploy4Real',
        user: 'deploy'
      }
    

3 个答案:

答案 0 :(得分:13)

我有类似的问题。事实证明SSH代理没有运行。我发现这是在查看Capistrano文档:http://capistranorb.com/documentation/getting-started/authentication-and-authorisation/

运行此命令:

  

$ ssh-add -l <​​/ p>

告诉我我的公钥没有添加到代理中,所以我不得不添加它:

  

$ ssh-add

已添加身份:/Users/me/.ssh/id_rsa(/Users/me/.ssh/id_rsa)

在此之后我的Capistrano部署工作。

答案 1 :(得分:3)

您应该在production.rb中设置:

forward_agent: true

我遇到了与Capistrano 3.4相同的问题。有了Capistrano 3.2.1,它似乎忽略了这个参数。

您可以使用capistrano-ssh-doctor来解决可能的配置问题。

答案 2 :(得分:0)

我认为你的capistrano可能在其git缓存中有一些旧文件,可能是通过重命名存储库或类似的东西。尝试delete服务器上cached-copy文件夹中的shared文件夹,因此capistrano将再次撤回您的回购。