【问题标题】:SSHKit::Runner::ExecuteErrorSSHKit::Runner::ExecuteError
【发布时间】:2015-02-08 03:16:39
【问题描述】:

$ bundle exec cap production deploy

(回溯仅限于导入的任务)上限中止!
SSHKit::Runner::ExecuteError:
as 执行时出现异常 Psara@sakura: git exit status: 128 git stdout: 没有写git 标准错误:权限被拒绝(公钥)。
致命:远端意外挂断

SSHKit::Command::失败:
git退出状态:128
git stdout:没有写
git stderr:权限被拒绝(公钥)。
致命:远端意外挂断

任务:TOP => git:check(通过使用 --trace 运行任务查看完整跟踪) 部署失败并出现错误:
作为 Psara@sakura 执行时出现异常:
git退出状态:128 git stdout:没有写
git stderr:权限被拒绝(公钥)。

致命:远端意外挂断

*

deploy.rb

设置:应用程序,'Psara'
设置:repo_url,'git@bitbucket.org:CBLaughter/psara.git'
设置 :deploy_to, '/home/Psara/Psara'
设置 :default_run_options, :pty => true

命名空间:部署做

在:restart, :clear_cache 之后 在角色(:网络)上,在::组,限制:3,等待:10 做 # 在这里我们可以做任何事情,例如: # 在 release_path 中做 # 执行 :rake, 'cache:clear' # 结尾 结束结束

结束

set :ssh_options, { forward_agent: true, paranoid: true, keys: "~/.ssh/id_rsa" }

*

production.rb

设置 :stage, :staging
设置:rails_env,:生产

角色 :app, %w{sakura}
角色:网络,%w{sakura}
角色 :db, %w{sakura}

服务器“sakura”,用户:“Psara”,角色:%w{web app},my_property:>:my_value

设置 :ssh_options, {
键:%w(~/.ssh/id_rsa),
forward_agent: 假,}



如果你能教我如何解决这个问题,我会很高兴。

我已经在 bitbucket 上添加了一个公钥,但它不起作用。

*

SSH 代理转发报告


  1. [成功]repo_url设置成功

  2. [成功] ssh 私钥文件存在

  3. [成功]ssh-agent 进程似乎在本地运行

  4. [成功] ssh-agent 进程被ssh-add 命令识别

  5. [成功] ssh 私钥添加到ssh-agent

  6. [成功] 可从本地计算机访问的应用程序存储库

  7. [成功]所有主机使用无密码登录

  8. [成功] forward_agent 对所有主机都可以

  9. [success] ssh 代理成功转发到远程主机

  10. [成功] 可从远程主机访问的应用程序存储库


看来 SSH 代理转发设置正确!你可以继续 与部署过程。

它在所有测试中都成功了,但仍然报同样的错误。

【问题讨论】:

  • 请编辑您的问题以使用代码块,以便我们阅读。还要清楚地定义你的错误是什么。
  • @Shion Yamaguchi:你是如何解决你的问题的,因为我也卡住了!!!和你在同一页上?

标签: ruby-on-rails bitbucket capistrano3


【解决方案1】:

确保您的机器上运行了 ssh-agent,因为您使用的是 ssh 转发,所以您的本地密钥应该能够从 bitbucket 访问和克隆您的 repo。您可以使用以下方式运行代理:

eval `ssh-agent`
ssh-add ~/.ssh/id_rsa

有关 ssh 转发的更多信息,您可以find here

您应该手动检查的另一件事是您可以 ssh 到您的服务器(您的公钥应该添加到服务器上的~/.ssh/authorized_keys),当然您可以在本地克隆您的 repo(这可能您能够做)。

更新:

现在我意识到您将转发用于生产,在这种情况下,您应该确保服务器上的密钥对(您必须拥有它,因为转发已关闭)能够从 bitbucket 克隆 repo,您也可以尝试在服务器上手动克隆。

【讨论】:

  • Hey Rastasheep 即使我也面临同样的问题..我经历了但无法解决。
  • @rastasheep 我在这里也有类似的问题:stackoverflow.com/questions/36900222/…。 Capistrano 是否登录到生产服务器,然后尝试将代码从存储库拉到生产服务器?如果是这样,有没有办法让 Capistrano 将代码从存储库推送到生产服务器?
  • @massaskillz 是的,Capistrano 只是通过 SSH 登录到您的机器,然后执行由它的 DSL 生成的命令。您可以创建自定义 Capistrano 任务来做任何您想做的事情。不幸的是,我认为不可能从存储库“推送”,可以将代码从主机复制(通过 scp 命令)到您的服务器。
【解决方案2】:

正如回溯所说,这可能与 ssh 公钥有关。我建议使用capistrano-ssh-doctor 解决问题。您将收到一份报告,准确说明设置中出了什么问题。

免责声明,我是capistrano-ssh-doctor插件的作者。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-12-14
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2022-11-17
    相关资源
    最近更新 更多